golangci-lint常量显式类型

时间:2019-03-21 14:23:14

标签: go

我对golangci-lint有疑问。 短绒棉给我的东西是这样的:

type outputFormat string

const (
    formatNone outputFormat = ""
    formatText              = "TEXT"
    formatJSON              = "JSON"
)

类似这样的错误:

  

只有该组中的第一个常量具有显式类型   (静态检查)
  formatNone outputFormat =“”

但是这有什么问题呢? 在https://go101.org/article/constants-and-variables.html中,他们在常量声明中的自动完成一章中描述了不完整的常量将被识别并填充。

我没有找到任何参考资料可以避免使用不完整的常量定义。

有人可以向我解释,这是怎么回事?

2 个答案:

答案 0 :(得分:4)

staticcheckdocumentation for that check中所述:

  

在如下常量声明中:

const (
     First byte = 1
     Second     = 2
)
     

常量Second与常量First的类型相同。此结构不应与

混淆
const (
      First byte = iota
      Second
)
     

其中FirstSecond确实具有相同的类型。仅当没有为常数指定显式值时,才传递类型。

     

在声明带有显式值的枚举时,重要的是不要写

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 时,我遇到了同样的问题