原文链接:https://github.com/golang/go/wiki/CodeReviewComments
1)用 goimport 代替 gofmt
2) https://golang.org/doc/effective_go.html#commentary
注释单独一行,开始于描述的名字,结束于。。没看明白
3)context.Context的值包含:跨API和流程边界的安全凭证,跟踪信息,截止日期和取消信号。
大多数函数用Context应该作为第一个参数接收
从不特别请求的函数可以使用context.Background(), 即使不要,也要在传递Context时使用err
默认情况是传递Context;如果你有充分的理由认为替代方案是错误的,那么只能直接使用context.Background()。
不要把Context添加到结构体中,而是把它作为参数加在每个这个类型的方法里面,一个例外是签名必须与标准库或第三方库中的接口匹配的方法。
不要在函数签名中自定义类型或者使用其他接口而不是Context
如果要传递应用程序数据,请将其放在参数中,接收器中,全局变量中,或者如果它真正属于那里,则放在Context值中。
Context是不变的,所以传相同的值没关系
4)如果一个类型的方法都与它的指针有关,就不要直接复制它的值
5)声明空slice:
var t []string : OK 空的slice
t := []string{} : NO 非空长度为0的slice
但是有些情况下,第二个好点,比如编码JSON对象(nil->null, []string->arra