为了账号安全,请及时绑定邮箱和手机立即绑定

在此行“binTag := field.Tag.Get(”binary”)”之后分配给

在此行“binTag := field.Tag.Get(”binary”)”之后分配给

Go
拉风的咖菲猫 2023-05-15 15:01:14
我试图分析 GO 程序,当我遇到这一行“binTag := field.Tag.Get("binary")”时,我对“binTag”将被分配的 值感到困惑。我在 GO reflect Package 中搜索了语法解释,我发现了这个,func (tag StructTag) Get(key string) 字符串Get 返回与标记字符串中的键关联的值。如果标签中没有这样的键,Get 返回空字符串。如果标签没有常规格式,则 Get 返回的值是未指定的。要确定标记是否明确设置为空字符串,请使用 Lookup。然后我搜索了 Golang 中 Tag 的意思,例如我得到了这个标签字段声明后面可以跟一个可选的字符串文字(标记),它成为相应字段声明中所有字段的属性。type T struct {    f1     string "f one"    f2     string    f3     string `f three`    f4, f5 int64  `f four and five`}所以,现在我对执行后分配给“binTag”的确切值有点困惑。提前致谢。
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

binTag""因为标签不包含键“binary”的值,标签也不遵循格式化结构标签的约定。

此代码显示如何访问标签:

v := reflect.TypeOf(T{})

sf, _ := v.FieldByName("f1")

fmt.Println(sf.Tag)               // prints "f one"

fmt.Println(sf.Tag.Get("binary")) // prints blank line

下面是一个带有键“binary”的有效标签的示例:


type U struct {

    g1 string `binary:"hello"`

}


v := reflect.TypeOf(U{})

sf, _ := v.FieldByName("g1")

fmt.Println(sf.Tag)               // prints binary:"hello"

fmt.Println(sf.Tag.Get("binary")) // prints hello


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信