Go-struct Tag

504 阅读1分钟
type RequestPayload struct {
    TransType string `json`
    Source    string `json`
}

本以为这个是结构体变量的默认值,实际上是tag。这个标签的作用是给结构体变量提供额外的信息,比如限定了这个字符串是json。

但是上面这种写法是有问题的,可以看到

struct field tag json not compatible with reflect.StructTag.Get: bad syntax for struct tag pair

这是因为,结构体标签依赖于 reflect.Type 获取结构体成员信息 reflect.StructField

JSON、BSON 等格式进行序列化及对象关系映射(Object Relational Mapping,简称 ORM)系统都会用到结构体标签,这些系统使用标签设定字段在处理时应该具备的特殊属性和可能发生的行为。这些信息都是静态的,无须实例化结构体,可以通过反射获取到。

结构体标签的正确形式

type RequestPayload struct {
    TransType string `json:"trans_type"`
    Source    string `json:"source"`
}

以键值对的形式,冒号、双引号和反引号都是必要的。如果有多个键值对,之间用一个空格分隔。注意键和值之间是没有空格的。