Struct Tag
相信大家都用过结构体的标签功能吧,特别是生成Json串会经常用到。
样例程序
请看下面这一段程序,这里使用反射,通过用 FieldByName(“Name”) 获得结构体的Name 字段。然后使用
.Tag.Get(“format”) 取得标签。
type Employee struct{
EmployeeID string
Name string `format: "normal"`
Age int
}
func TestInvokeByName(t *testing.T){
e := &Employee{"1","Terry",20}
if nameField,ok := reflect.TypeOf(*e).FieldByName("Name"); !ok{
t.Error("Failed to get 'Name' Field")
}else {
t.Log(nameField.Tag)
t.Log("Tag is:", nameField.Tag.Get("format"))
}
}
运行结果
然而结果是:
问题在哪?
经过多次实验和查资料,一篇网上对于标签的描述引起了我的注意:
可以用多个Key使用空格进行分开,然后使用Get方法获取不同Key的值。
也就是说空格是有语法意义的。检查一下结构体定义,果然发现了空格。
在去掉空格后,一切正确。
一般来说,Json的key和value之间加空格是一个好习惯。好习惯惹祸了。