2 回答
TA贡献1827条经验 获得超8个赞
Go 没有一般意义上的属性。结构体中的字符串是结构体标签:
字段声明后可以跟一个可选的字符串文字标签,它成为相应字段声明中所有字段的属性。这些标签通过反射接口可见,并参与结构的类型标识,否则会被忽略。
// A struct corresponding to the TimeStamp protocol buffer.
// The tag strings define the protocol buffer field numbers.
struct {
microsec uint64 "field 1"
serverIP6 uint64 "field 2"
process string "field 3"
}
您无法添加或更改它们,但可以使用reflect包访问它们。
另一件有点像属性的东西是“神奇的评论”,比如
// +build amd64
或者
//go:noinline
这些是特定于编译器的,IIRC 不是语言规范的一部分。
TA贡献1712条经验 获得超3个赞
那些是标签。从语言规范(结构类型的结尾):
字段声明后可以跟一个可选的字符串文字标签,它成为相应字段声明中所有字段的属性。这些标签通过反射接口可见,并参与结构的类型标识,否则会被忽略。
根据上面的引用,您可以将它们与反射一起使用。
另外,来自反射包文档:
StructTag 是结构字段中的标记字符串。
按照惯例,标签字符串是可选的空格分隔键:“值”对的串联。每个键都是一个非空字符串,由除空格 (U+0020 ' ')、引号 (U+0022 '"') 和冒号 (U+003A ':') 以外的非控制字符组成。每个值都用引号引起来使用 U+0022 '"' 字符和 Go 字符串文字语法。
上面的链接中有一个很好的可执行示例。
标签也广泛用于 json。从json 包文档:
对象的默认键字符串是结构字段名称,但可以在结构字段的标签值中指定。struct 字段的标签值中的“json”键是键名,后跟可选的逗号和选项。
这个较早的问题也可能有帮助。
- 2 回答
- 0 关注
- 184 浏览
添加回答
举报