在结构体标签中使用变量

egi*_*dra 5 json go

如何在 Go 结构体标签中使用变量?

这有效:

type Shape struct {
    Type string `json:"type"`
}
Run Code Online (Sandbox Code Playgroud)

这不起作用:

const (
    TYPE = "type"
)

type Shape struct {
    Type string fmt.Sprintf("json:\"%s\"", TYPE)
}
Run Code Online (Sandbox Code Playgroud)

在第一个示例中,我使用了一个字符串文字,它有效。在第二个示例中,我正在使用 构建一个字符串fmt.Sprintf,但似乎出现错误: syntax error: unexpected name, expecting }

这是在 Go 游乐场上:https : //play.golang.org/p/lUmylztaFg

eva*_*nal 7

如何在 Go 结构体标签中使用变量?你不会,这是语言所不允许的。您不能使用在运行时计算的语句代替编译时字符串文字作为结构上字段的注释。据我所知,在任何编译语言中都没有这种工作。

  • “据我所知,在任何编译语言中都没有这种工作。” 在 D、Rust 和 Scala 中你可以做到。:P (2认同)
  • 甚至 C 和 C++ 也允许这样做。真的,任何支持某种宏的语言...... (2认同)