当我遇到此行时,我正在尝试分析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 exampleStructTag.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/

10-13 03:42