乐趣区

关于go:GO实践笔记

背景

  1. 已用 GO 进行我的项目实际。
  2. 浏览其它开源我的项目,发现自己代码实现不够标准。
  3. 规范库不够相熟。

error 包

  1. 谬误的包裹,应用 Unwrap() error。
  2. 谬误的比拟,应用 Is(err, target error) bool。
  3. 谬误的类型判断,应用 As(err error, target interface{}) bool。
  4. 以上做法的益处是能兼容寄存和判断整个 err 链路的全副 err,而不仅是以后的 err。

context 包

  1. 当处于申请顶层的时候,应用 Background() Context 获取一个空的 context 实例。
  2. 当不晓得传递哪一个 context 的时候,可应用 TODO() Context 获取一个空实例长期应用。
  3. valueCtx 只实现了创立和获取值的办法,其它接口所需办法为父 context 的代理办法。
  4. cancelCtx 实现了 Done() <-chan struct{} 办法,这个构造采纳懒加载,在 context 调用勾销办法后,该 chan 被敞开。实现的 Value(key interface{}) interface{} 办法用于获取 cancelCtx 本身。Err() error 办法用于返回 err。
  5. timerCtx 实现了 Deadline() (deadline time.Time, ok bool),利用定时器及 cancelCtx 实现超时勾销的能力。WithDeadline 和 WithTimeout 都实现自 timerCtx。
  6. 包裹 valueCtx 时,应应用自定义的非导出类型和非导出变量作为 key,并提供封装好的获取值的办法,防止在内部应用 key 间接获取值。这样能够躲避全局 key 的净化问题。
退出移动版