在 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 编码器和解码器)在编译期间使用结构标签。这些工具需要在编译时知道标签值,以便正确生成必要的代码。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3