自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Request

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

2018-08-30 19:29:03

阅读数 320

评论数 0

原创 处理器和处理器函数

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

2018-08-29 17:00:24

阅读数 161

评论数 0

转载 Base64和Base64URL

转自:https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001399413803339f4bbda5c01fc479cbea98b1387390748000 Base64是一种用...

2018-08-25 18:09:44

阅读数 5140

评论数 0

原创 修改apt源

修改Ubuntu的默认apt源: sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份 sudo gedit /etc/apt/sources.list #修改 sudo apt up...

2018-08-24 14:07:22

阅读数 886

评论数 0

原创 HTTPS

SSL(Secure Socket Layer, 安全套接字层): SSL是一种通过公钥基础设施(PKI)为通信双方提供数据加密和身份验证的协议,其中通信的双方通常是客户端和服务器。后改名为TLS(Transport Layer Security, 传输层安全协议)。 HTTPS: HTTP...

2018-08-21 16:33:31

阅读数 41

评论数 0

原创 使用Go构建服务器

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

2018-08-21 16:00:32

阅读数 1939

评论数 0

原创 Go的net/http标准库

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

2018-08-21 15:26:34

阅读数 86

评论数 0

原创 HTTP/2

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

2018-08-21 11:47:01

阅读数 30

评论数 0

原创 postgresql快速安装及使用

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

2018-08-15 19:25:46

阅读数 73

评论数 0

原创 用户与用户组管理

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

2018-08-15 17:51:11

阅读数 29

评论数 0

原创 Web应用基本工作流程

占位

2018-08-13 20:58:19

阅读数 361

评论数 0

原创 URI

占位

2018-08-13 20:57:48

阅读数 44

评论数 0

原创 HTTP响应

占位

2018-08-13 20:57:28

阅读数 30

评论数 0

原创 HTTP请求

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

2018-08-13 20:57:02

阅读数 32

评论数 0

原创 Go Web概述

1.什么是Web应用 Web应用是为了通过HTTP向用户发送定制的动态内容而诞生的。 狭义来看,Web应用对客户端发送的HTTP请求做出响应,并通过HTTP响应将HTML传回客户端。 如果一个程序不是向用户渲染并展示HTML,而是向其他程序返回某种非HTML格式的数据,那么这个程序就是一个为...

2018-08-13 20:40:53

阅读数 38

评论数 0

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

询问接口的对象是否是某个类型: type sg struct { str string } func (s *sg) String() string { return s.str } s := new(sg) s.str = "hello" var...

2018-08-04 18:37:12

阅读数 250

评论数 0

原创 flag.Value接口

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

2018-08-04 12:25:34

阅读数 213

评论数 0

转载 转载:Ubuntu常用命令

基本命令: cd 、 pwd 、 ls 、 mkdir 、 touch 、 sudo apt install tree 、 ctrl + c 软件管理(更新软件源、安装软件、删除软件): sudo apt update 、 sudo apt install tree 、 sudo apt r...

2018-08-04 11:22:39

阅读数 39

评论数 0

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

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

2018-08-04 11:22:03

阅读数 81

评论数 0

原创 error接口和errors包

error接口: error只是一个接口类型 type error interface { Error() string } 构造error最简单的方法是调用errors.New,它会返回一个包含指定错误消息的新error实例: err := errors.New("...

2018-08-04 10:59:51

阅读数 368

评论数 0

原创 错误处理策略

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

2018-08-04 10:41:43

阅读数 265

评论数 0

原创 handler接口

实现handler接口,用来处理请求。 type Handler interface { ServerHTTP(w ResponseWriter, r *Request) } 例如,显示一个电子商务网站的库存: type dollars float32 func (d do...

2018-08-03 18:52:01

阅读数 238

评论数 0

原创 sort接口

sort包提供了针对任意序列根据任意排序函数原地排序的功能。 type Interface interface { Len() int //序列长度 Less(i, j int) bool //比较两个元素的含义 Swap(i, j int) //如何交换两个元...

2018-08-03 18:06:13

阅读数 90

评论数 0

原创 指针接收者的方法

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

2018-08-02 16:52:47

阅读数 55

评论数 0

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

方法声明: 方法声明和普通函数声明类似,只是在函数名字前多了一个参数。这个参数把这个方法绑定到参数对应的类型上。 type Point struct { x, y float64} func (p Point) Distance(q Point) float64 { return ma...

2018-08-02 16:07:50

阅读数 598

评论数 0

原创 封装,多态

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

2018-08-02 15:29:58

阅读数 28

评论数 0

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

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

2018-08-02 15:15:16

阅读数 194

评论数 0

原创 宕机和恢复

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

2018-08-02 15:04:58

阅读数 228

评论数 0

原创 函数递归

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

2018-08-02 15:01:52

阅读数 22

评论数 0

原创 变长参数

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

2018-08-02 14:50:40

阅读数 133

评论数 0

原创 函数变量

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

2018-08-02 14:22:33

阅读数 122

评论数 0

原创 map

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

2018-08-02 09:49:11

阅读数 98

评论数 0

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