如何使用struct字段的标签?

时间:2015-01-01 21:39:36

标签: go

我不明白struct中的字段标记是如何使用的以及何时使用。每https://golang.org/ref/spec#Struct_types

  

[tag]成为相应字段声明中所有字段的属性

这是什么意思?

1 个答案:

答案 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说明"成为相应字段声明中所有字段的属性"。