不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

Go基础冲刺营_Day2_type定义与Server抽象

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
2
3
4
type Name struct {
fieldName FieldType
// ...
}
  • 结构体和结构体的字段都遵循大小写控制访问性的原则

type A B

  • 基本语法: type TypeA TypeB
  • 我一般是,在我使用第三方库又没有办法修改源码的情况下,又想在扩展这个库的结构体的方法,就会用这个

type A = B

  • 基本语法: type TypeA = TypeB
  • 别名,除了换了一个名字,没有任何区别

初始化

  • Go 没有构造函数!!
  • 初始化语法: Struct{}
  • 获取指针: &Struct{}
  • 获取指针2: new(Struct)
  • new 可以理解为 Go 会为你的变量分配内存,并且把内存都置为0

指针

  • 和 C, C++ 一样, *表示指针,&取地址
  • 如果声明了一个指针,但是没有赋值,那么它是 nil

结构体自引用

  • 结构体内部引用自己,只能使用指针
  • 准确来说,在整个引用链上,如果构成循环,那就只能用指针

方法接收器

  • 结构体接收器内部永远不要修改字段

方法接收器用哪个?

  • 设计不可变对象,用结构体接收器
  • 其它用指针

总结:遇事不决用指针

Server与Context抽象

简单支持RESTFul API

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!