Go语言结构体中的标签问题

本文探讨了Go语言中结构体标签的问题,特别是在生成Json串时遇到的困难。通过一个样例程序展示了如何使用反射获取结构体字段的Tag,并揭示了Tag中空格在语法上的重要意义,即用于分隔多个Key。作者发现由于在结构体定义中键值之间存在空格,导致了错误的结果。修正这个问题的方法是移除空格,从而确保正确地获取标签值。
摘要由CSDN通过智能技术生成

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之间加空格是一个好习惯。好习惯惹祸了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值