http库
Request概览
- Body和GetBody
- URL
- Method
- Header
- Form
Request Body
- Body:只能读取一次,意味着你读了别人就不能读了;别人读了你就不能读了。
Request Body - GetBody
- GetBody:原则上是可以多次读取,但是在原生的http.Request里面,这个是 nil
- 在读取到 body 之后,我们就可以用于反序列化,比如说将json格式的字符串转化为一个对象等
Request Query
- 除了 Body,我们还可能传递参数的地方是 Query
- 所有的值都被解释为字符串,所以需要自己解析为数字等
Request URL
- 包含路径方面的所有信息和一些很有用的操作
- URL 里面 Host 不一定有值
- r.Host 一般都有值,是Host这个header的值
- RawPath 也是不一定有
- Path肯定有
Request Header
- header大体上是两类,一类是http 预定义的;一类是自己定义的
- Go 会自动将 header 名字转为标准名字——其实就是大小写调整
- 一般用 X 开头来表明是自己定义的,比如说 X-mycompanyyour=header
Form
- Form 和 ParseForm
- 要先调用 ParseForm
- 建议加上 Content-Type:application/x-www-formurlencoded
基础语法type
interface 定义
- 基本语法 type 名字 interface {}
- 里面只能有方法,方法也不需要 func 关键字
- 啥是接口(interface):接口是一组行为的抽象
- 尽量用接口,以实现面向接口编程
struct 定义
- 基本语法:
1 | type Name struct { |
- 结构体和结构体的字段都遵循大小写控制访问性的原则
type A B
- 基本语法: type TypeA TypeB
- 我一般是,在我使用第三方库又没有办法修改源码的情况下,又想在扩展这个库的结构体的方法,就会用这个
type A = B
- 基本语法: type TypeA = TypeB
- 别名,除了换了一个名字,没有任何区别
初始化
- Go 没有构造函数!!
- 初始化语法: Struct{}
- 获取指针: &Struct{}
- 获取指针2: new(Struct)
- new 可以理解为 Go 会为你的变量分配内存,并且把内存都置为0
指针
- 和 C, C++ 一样, *表示指针,&取地址
- 如果声明了一个指针,但是没有赋值,那么它是 nil
结构体自引用
- 结构体内部引用自己,只能使用指针
- 准确来说,在整个引用链上,如果构成循环,那就只能用指针
方法接收器
- 结构体接收器内部永远不要修改字段
方法接收器用哪个?
- 设计不可变对象,用结构体接收器
- 其它用指针
总结:遇事不决用指针