golang struct的tag
Go的struct声明允许字段附带Tag来对字段做一些标记。
Tag不仅仅是一个字符串那么简单,因为其主要用于反射场景,reflect包中提供了操作Tag的方法,所以Tag写法也要遵循一定的规则。
1.Tag规则
Tag本身是一个字符串,但字符串中却是:以空格分隔的 key:value 对。
key: 必须是非空字符串,字符串不能包含控制字符、空格、引号、冒号。
value: 以双引号标记的字符串
注意:冒号前后不能有空格
如下代码所示,如此写没有实际意义,仅用于说明Tag规则
type Server struct {
ServerName string `key1:"value1" key11:"value11"`
ServerIP string `key2:"value2"`
}
上述代码ServerName字段的Tag包含两个key-value
对。ServerIP字段的Tag只包含一个key-value
对。
2.Tag是Struct的一部分
前面说过,Tag只有在反射场景中才有用,而反射包中提供了操作Tag的方法。在说方法前,有必要先了解一下Go是如何管理struct字段的。
以下是reflect包中的类型声明,省略了部分与本文无关的字段。
// A StructField describes a si