结构体标签

结构体的每个字段都可以有标签(Tag)。它用于记录程序员对字段自定义的信息,可被reflect包读取。

type Account struct {
	Username      string `json:"username"`
	DisplayName   string `json:"display_name"`
	FavoriteColor string `json:"favorite_color,omitempty"`
}

上例中,标签被encoding/json包用在JSON序列化和反序列化时改变键名。

译者注

在Golang相关的文档中,把序列化称为marshaling,把事物集中有序管理的意思,直译为“封送”;反序列化称为unmarshaling,直译为“拆封”。本书翻译中,考虑中文技术人员的用语习惯,则直接称为序列化和反序列化。

尽管标签内容可以是任意字符串,但它的最佳实践被认为是用空格分隔的键值对(key:"value"):

type StructName struct {
	FieldName int `package1:"customdata,moredata" package2:"info"`
}

encoding/xml 和 encoding/json 两个标准库都重度使用了结构体标签。

请进一步阅读如何在运行时利用反射访问结构体标签

最后更新于