我对golangci-lint有疑问。 短绒棉给我的东西是这样的:
type outputFormat string
const (
formatNone outputFormat = ""
formatText = "TEXT"
formatJSON = "JSON"
)
类似这样的错误:
只有该组中的第一个常量具有显式类型 (静态检查)
formatNone outputFormat =“”
但是这有什么问题呢? 在https://go101.org/article/constants-and-variables.html中,他们在常量声明中的自动完成一章中描述了不完整的常量将被识别并填充。
我没有找到任何参考资料可以避免使用不完整的常量定义。
有人可以向我解释,这是怎么回事?
答案 0 :(得分:4)
如staticcheck的documentation for that check中所述:
在如下常量声明中:
const ( First byte = 1 Second = 2 )
常量
混淆Second
与常量First
的类型不相同。此结构不应与const ( First byte = iota Second )
其中
First
和Second
确实具有相同的类型。仅当没有为常数指定显式值时,才传递类型。在声明带有显式值的枚举时,重要的是不要写
const ( EnumFirst EnumType = 1 EnumSecond = 2 EnumThird = 3 )
这种类型的差异会导致各种令人困惑的行为和错误。
答案 1 :(得分:1)
就我而言,我通过包含所有枚举项的类型解决了这个问题
type Verb string
const (
DEL Verb = "DEL"
POST Verb = "POST"
GET Verb = "GET"
)
当我只在第一个枚举 (DEL) 上使用 puttig Verb 时,我遇到了同样的问题