背景
- 已用GO进行我的项目实际。
- 浏览其它开源我的项目,发现自己代码实现不够标准。
- 规范库不够相熟。
error包
- 谬误的包裹,应用 Unwrap() error。
- 谬误的比拟,应用 Is(err, target error) bool。
- 谬误的类型判断,应用 As(err error, target interface{}) bool。
- 以上做法的益处是能兼容寄存和判断整个err链路的全副err,而不仅是以后的err。
context包
- 当处于申请顶层的时候,应用 Background() Context 获取一个空的context实例。
- 当不晓得传递哪一个context的时候,可应用 TODO() Context 获取一个空实例长期应用。
- valueCtx只实现了创立和获取值的办法,其它接口所需办法为父context的代理办法。
- cancelCtx实现了 Done() <-chan struct{} 办法,这个构造采纳懒加载,在context调用勾销办法后,该chan被敞开。实现的 Value(key interface{}) interface{} 办法用于获取cancelCtx本身。Err() error 办法用于返回err。
- timerCtx实现了Deadline() (deadline time.Time, ok bool),利用定时器及cancelCtx实现超时勾销的能力。WithDeadline和WithTimeout都实现自timerCtx。
- 包裹valueCtx时,应应用自定义的非导出类型和非导出变量作为key,并提供封装好的获取值的办法,防止在内部应用key间接获取值。这样能够躲避全局key的净化问题。