在 Go 结构体标签中使用变量
在 Go 中,结构体标签用于指定有关结构体中字段的元数据。虽然可以使用字符串文字定义标签,但尝试在其位置使用变量会导致错误。
无效用法:
const ( TYPE = "type" ) type Shape struct { Type string fmt.Sprintf("json:\"%s\"", TYPE) }
此代码将抛出语法错误,因为它尝试使用 fmt.Sprintf 语句动态生成标记值。 Go 要求 struct 标签是编译时字符串文字。
有效用法:
type Shape struct { Type string `json:"type"` }
在此示例中,标签被定义为字符串文字。这是指定结构体标签的正确方法。
说明:
有效示例和无效示例之间的主要区别在于评估时间。字符串文字在编译时计算,而 fmt.Sprintf 语句在运行时计算。各种 Go 工具(例如 JSON 编码器和解码器)在编译期间使用结构标签。这些工具需要在编译时知道标签值,以便正确生成必要的代码。
以上是为什么我不能在 Go Struct 标签中使用变量?的详细内容。更多信息请关注PHP中文网其他相关文章!