一个优秀的工程,必然会对代码进行check,go本身提供了如下check工具,常用的有:
- vet
- golint
- gofmt
现在简单记录一下这些格式可能会出的问题以及如何修改:
vet
composite literal uses unkeyed fields (vet)
这个是说明你调用了那个结构体,但是没有注明里面结构体的key值,例如:
type struct AAA{
A int
B int
}
当你调用AAA结构体填充内容时,需要在前面标明A,B。
struct field hash has json tag but is not exported (vet)
这个是说明,在结构体中的这个字段应该被导出,将字段名字的首字母改为大写即可。
the cancel function returned by context.WithCancel should be called, not discarded, to avoid a context leak (vet)
这个是说明,你的函数返回值不应该被忽略,这样可能会造成上下文忽略。
ctxChild, _ := context.WithCancel(ctx)
WithCancel有两个返回值context和func(需要被cacel的func),这个func参数是不可以省略的,会造成上下文的泄漏。
- unreachable code
if err != nil {
log.Error("Error: ReadTxIndex======%#v", err)
panic("Error: ReadTxIndex======")
return nil, err
}
上面的这段代码在panic之后,又return,因为panic之后,代码就已经结束了,下面的那句return语句永远不会执行。
网友评论