自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 Request

Request 结构表示客户端发送的HTTP请求报文,且并不是逐句定义。这个结构是HTTP请求报文经过语法分析后,其中较为重要的信息。主要结构为: URL字段 Header字段 Body字段 Form字段、PostForm字段和MultipartForm字段type Request struct { // Method string //是一个指向*ur...

2018-08-30 19:29:03 504

原创 处理器和处理器函数

处理器 一个处理器就是实现了Handler这个接口:type Handler interface { ServeHTTP(ResponseWriter, *Request)}实现一个处理器://定义一个处理器type MyHandler struct{}//实现Handler接口func (h *MyHandler) ServeHTTP(w http.Respon...

2018-08-29 17:00:24 436

转载 Base64和Base64URL

转自:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001399413803339f4bbda5c01fc479cbea98b1387390748000Base64是一种用64个字符来表示任意二进制数据的方法。用记事本打开exe、jpg、pdf这些文件时,我们都会看到一...

2018-08-25 18:09:44 22037 1

原创 修改apt源

修改Ubuntu的默认apt源:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份sudo gedit /etc/apt/sources.list #修改sudo apt update #更新列表...

2018-08-24 14:07:22 2817

原创 HTTPS

SSL(Secure Socket Layer, 安全套接字层): SSL是一种通过公钥基础设施(PKI)为通信双方提供数据加密和身份验证的协议,其中通信的双方通常是客户端和服务器。后改名为TLS(Transport Layer Security, 传输层安全协议)。HTTPS: HTTPS需要使用SSL/TLS来实现数据加密以及身份验证。SSL证书存储在服务器上,它使用X.509格式进行...

2018-08-21 16:33:31 117

原创 使用Go构建服务器

Server的结构如下:type Server struct { Addr string // 网络地址,默认使用80端口 Handler Handler // 处理器,若为空则默认使用http.DefaultServeMux这个实例 TLSConfig *tls.Config ReadTimeout time.Duration ReadH...

2018-08-21 16:00:32 4035

原创 Go的net/http标准库

很多框架认为自己提供的约定和模式是最佳实践(best practice),如果开发者没有正确理解这些最佳实践,不了解这么约定和模式的用法,可能在有害的情况下盲目地使用它们。一个好的框架是快速构造可扩展且健壮的Web应用的最好方法,但是隐藏在下面的概念和基础也是非常重要的。 对Go语言来说,隐藏在框架之下的通常是net/http和html/temlplate这两个标准库。net/http标准库...

2018-08-21 15:26:34 230

原创 HTTP/2

这个版本注重性能,与之前版本使用纯文本不同,HTTP/2是一种二进制协议。 跟HTTP1.x在一个网络连接里只能发送单个请求的做法不同,HTTP/2是完全的多路复用的,着意味着多个请求和响应可以在同一时间内使用同一个连接。 在Golang 1.6版本中,用户使用HTTPS时自动使用HTTP/2。...

2018-08-21 11:47:01 102

原创 postgresql快速安装及使用

ubuntu安装apt-get install postgresql-10 其他系统版本或安装详细流程详见官网 https://www.postgresql.org/download/安装postgresql后,数据库会生成一个名为postgres的linux账户,并生成一个名为postgres的数据库账户 1.修改数据库账户名为postgres的密码登录:sudo -...

2018-08-15 19:25:46 241

原创 用户与用户组管理

Linux会为每一个用户启动一个进程,由这个进程接收用户的各种请求。 规定一个用户组的权限,这样组里的用户就自动拥有这些权限。某些服务器程序安装时,会生成一些特定的用户和用户组,用于对服务器进行管理。添加用户:sudo useradd -m 用户名 //-m参数会为新用户建立主目录修改用户密码:sudo passwd 用户名修改root密码:sudo passwd r...

2018-08-15 17:51:11 122

原创 Web应用基本工作流程

占位

2018-08-13 20:58:19 2957

原创 URI

占位

2018-08-13 20:57:48 163

原创 HTTP响应

占位

2018-08-13 20:57:28 106

原创 HTTP请求

1.HTTP请求报文 这些文本会按以下顺序排列: 请求行(request-line) 零个或任意个请求首部(header) 一个空行 可选的报文主体(body)GET index HTTP1.1 //请求方法 URI HTTP版本host: localhost:8080 //首部字段user agent: Mozilla/5.0 //首部字段 Firefox/61.0(em...

2018-08-13 20:57:02 111

原创 Go Web概述

1.什么是Web应用 Web应用是为了通过HTTP向用户发送定制的动态内容而诞生的。 狭义来看,Web应用对客户端发送的HTTP请求做出响应,并通过HTTP响应将HTML传回客户端。如果一个程序不是向用户渲染并展示HTML,而是向其他程序返回某种非HTML格式的数据,那么这个程序就是一个为其他程序提供服务的Web服务。2.HTTP简介 在HTTP协议中,客户端被称作用户代理(user...

2018-08-13 20:40:53 485

原创 类型断言(接口查询)

询问接口的对象是否是某个类型:type sg struct { str string}func (s *sg) String() string { return s.str}s := new(sg)s.str = "hello"var v interface{} = ss1, ok := v.(fmt.Stringer) //接口v是否实现了fmt....

2018-08-04 18:37:12 647

原创 flag.Value接口

flag.Value接口来帮助我们定义命令行标志package flagtype Value interface { String() string Set(string) error //解析传入的字符串并更新标志值}flag.CommandLine全局变量处理标志值:type OM struct { n1 string}func (om *...

2018-08-04 12:25:34 840

转载 转载:Ubuntu常用命令

基本命令:cd 、 pwd 、 ls 、 mkdir 、 touch 、 sudo apt install tree 、 ctrl + c软件管理(更新软件源、安装软件、删除软件):sudo apt update 、 sudo apt install tree 、 sudo apt remove tree命令速查:xxx --help 、 man xxx安装mysql...

2018-08-04 11:22:39 167

原创 通过结构体内嵌组成类型

内嵌一个T类型,那么T的方法都被纳入。 内嵌允许构成复杂的类型,该类型由许多字段构成,每个字段提供一些方法。type WOW struct { int string}func (w WOW) String() string { return "我是一代WOW的方法"}type WOW2 struct { name string WOW}...

2018-08-04 11:22:03 222

原创 error接口和errors包

error接口: error只是一个接口类型type error interface { Error() string}构造error最简单的方法是调用errors.New,它会返回一个包含指定错误消息的新error实例:err := errors.New("EOF")但更常用是使用fmt.Errorf,它还额外提供字符串格式化功能。errors包:pa...

2018-08-04 10:59:51 1258

原创 错误处理策略

成功的逻辑一般不会放在else块中而是在外层的作用域。 1.最常见的策略将错误传递下去,子例程的错误变成主例程的错误。resp, err := http.Get(url)if err != nil { return nil, err}fmt.Errorf格式化一条错误消息并返回一个新的错误值fmt.Errorf("a error") //返回一个error2.对...

2018-08-04 10:41:43 2143

原创 handler接口

实现handler接口,用来处理请求。type Handler interface { ServerHTTP(w ResponseWriter, r *Request)}例如,显示一个电子商务网站的库存:type dollars float32func (d dollars) String() string { return fmt.Sprintf("$%...

2018-08-03 18:52:01 1842

原创 sort接口

sort包提供了针对任意序列根据任意排序函数原地排序的功能。type Interface interface { Len() int //序列长度 Less(i, j int) bool //比较两个元素的含义 Swap(i, j int) //如何交换两个元素}例子,根据长度将字符串分片排序:type Strs []string//计算长度fu...

2018-08-03 18:06:13 453

原创 指针接收者的方法

由于主调函数会复制每一个实参变量,如果要更新变量或避免复制,我们需要指针传递。同样适合于更新接收者。type WOW struct { int string}//这里只是复制了w,没有复制w的指针func (w WOW) f() { w.int = 100 w.string = "a"}func main() { w := WOW{2, "...

2018-08-02 16:52:47 281

原创 方法声明、方法变量和方法表达式

方法声明: 方法声明和普通函数声明类似,只是在函数名字前多了一个参数。这个参数把这个方法绑定到参数对应的类型上。type Point struct { x, y float64}func (p Point) Distance(q Point) float64 { return math.Hypot(q.x-p.y, q.y-p.y)}方法变量: 函数只需要提供实参而不需要提...

2018-08-02 16:07:50 1824

原创 封装,多态

封装: Go语言只有一种方式控制命名的可见性(可访问属性):首字母大写的标识符是可以从包中导出的。 所以要封装一个对象,必须使用结构体。继承: @——@ 多态: ×——×...

2018-08-02 15:29:58 88

原创 任意类型和字节切片转换

任意类型转换字节切片 (任意类型需是指明的占位大小 例如:int8 int16 float32……例如int不可以)func AnyToHex(any interface{}) []byte { buff := new(bytes.Buffer) //数据写入buff err := binary.Write(buff, binary.BigEndian, any) ...

2018-08-02 15:15:16 1195

原创 宕机和恢复

宕机: 1.Go语言的类型系统会捕获许多编译时错误。 2.Go语言运行时检测到错误(比如数组越界,引用空指针等),它就会发生宕机。 3.当宕机发生时,所有的延迟函数以倒序执行。Go语言的宕机机制让延迟执行的函数在栈清理之前调用。恢复: 退出程序通常是正确处理宕机的方式,最安全的做法还是选择性地使用recover。...

2018-08-02 15:04:58 462

原创 函数递归

Go语言实现了可变长度的栈,栈的大小会随着使用而增长,可达到1G左右的上限。这使我们可以安全使用递归而不用担心溢出问题。 斐波那契数列:func f(n int64) int64 { if n < 2 { return n } return f(n - 1) + f(n - 2)}...

2018-08-02 15:01:52 85

原创 变长参数

可变的参数个数,一般在参数列表最后的类型名称之前使用省略号“…”声明。 变长函数参数实际是一个slice:func change(nums ...int) { fmt.Println(nums, reflect.TypeOf(nums))}变长参数函数的类型和一个带有普通slice参数的函数类型是不一样的:func f(s ...int) {}func g(s []int...

2018-08-02 14:50:40 538

原创 函数变量

函数类型的零值是nil,调用一个空的函数变量将导致宕机。var f func()函数变量也有类型,可以赋值给变量或者传递或从其他函数中返回。var f func() = func() { fmt.Println("hello") }f1 := f函数类型本身不可比较...

2018-08-02 14:22:33 275

原创 map

map是一个拥有键值对元素的无序集合:在Go语言中,map是散列表的引用。map[K]V所有的键都有相同的数据类型,同时所有的值也有相同的数据类型。 注意: 1.map元素不是一个变量,无法获取地址。 2.map的零值是nil,空的map不是nil。 3.键K,必须是可以通过操作符==来进行比较的数据类型,目的是map可以检测某一键是否已经存在。使用make创建map: ...

2018-08-02 09:49:11 166

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除