我不明白struct
中的字段标记是如何使用的以及何时使用。每https://golang.org/ref/spec#Struct_types:
这是什么意思?[tag]成为相应字段声明中所有字段的属性
答案 0 :(得分:1)
[tag]成为相应字段声明中所有字段的属性
除了上面的链接(" What are the use(s) for tags in Go?"," go lang, struct: what is the third parameter")this thread提供了一个示例不来自标准包:
假设我有以下代码(见下文)。我使用类型开关检查
WhichOne()
中的参数类型。如何访问代码("
blah
"在这两种情况下)?
我强迫使用反射包,或者这也可以用" pure"去吗?
type PersonAge struct {
name string "blah"
age int
}
type PersonShoe struct {
name string "blah"
shoesize int
}
func WhichOne(x interface{}) {
...
}
在阅读(再次)后,查看
json/encode.go
并进行了一些反复试验,我找到了解决方案。
打印出以下结构的"blah"
:
type PersonAge struct {
name string "blah"
age int
}
您需要:
func WhichOne(i interface{}) {
switch t := reflect.NewValue(i).(type) {
case *reflect.PtrValue:
x := t.Elem().Type().(*reflect.StructType).Field(0).Tag
println(x)
}
}
此处:Field(0).Tag
说明"成为相应字段声明中所有字段的属性"。