结构体标签

结构体的每个字段都可以有标签(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 两个标准库都重度使用了结构体标签。
请进一步阅读如何在运行时利用反射访问结构体标签