共计 678 个字符,预计需要花费 2 分钟才能阅读完成。
背景
- 已用 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 的净化问题。
正文完