当我遇到此行时,我正在尝试分析GO程序
“binTag:= field.Tag.Get(” binary“)”
我对将分配“binTag”的值感到困惑。
我在GO反射包中搜索了语法说明,然后发现了这一点,
函数(标签StructTag)获取(键字符串)字符串
Get返回与标签字符串中的key关联的值。如果标签中没有这样的键,则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”的确切值有些困惑。
提前谢谢。
最佳答案
有关标签格式的说明,请参见StructTag documentation。
请参见StructTag example和StructTag.Lookup示例标签示例。binTag
的值为""
,因为该标记不包含键“binary”的值,该标记也不包含格式化struct标记的约定。
这段代码显示了如何访问标签:
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
关于go - 这行“binTag:= field.Tag.Get(“binary”)”之后分配给“bintag”的值是什么,其中field是GOLang中的struct字段之一,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53717547/