Go struct 中 field tag 的定义与使用
Contents
什么是 field tag
在 Go 的 struct 定义中,有时需要对某个字段添加额外的元信息,这就需要用到 field tag,即成员标签变量。
field tag 常见于 JSON (或 XML)结构体的定义中。当用 Go 的 struct 方式定义一个 JSON 数据结构,其 struct 中定义的变量名与实际 JSON 所用的变量名不一定一致(在 Go 中,这类 struct 的变量都要求首字母大写以保持可被外部引用),这时就需要用 field tag 来为每个变量添加额外的元信息。如下所示:
|
|
其对应的 JSON 格式为:
|
|
field tag 的定义
成员标签定义可以是任意字符串,但是按照习惯,是由一串由空格分开的标签键值对 key:"value"
组成的。因为标签的值使用双引号括起来,所以一般标签都是原生的字符串字面量。
field tag 的使用
从本质上来看,field tag 其实是提供了一种机制去为 struct 成员变量添加额外的元信息,这部分元信息可以 reflect 的方式来获取。下面就来展示一下怎么用 Go 的 reflect
包来获取 field tag。
如下所示:
|
|
将输出:
|
|
reflect 包支持对采用惯用法定义的 struct tag 的解析,如:
|
|
将输出:
|
|
使用 go vet 工具可以检查 struct tag 是否有以惯用法定义:
|
|