猿问

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

我试图分析 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”的确切值有点困惑。


提前致谢。


拉风的咖菲猫
浏览 115回答 1
1回答

元芳怎么了

值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
随时随地看视频慕课网APP

相关分类

Go
我要回答