10.4 带标签的结构体

结构体中的字段除了有名字和类型外,还可以有一个可选的标签 (tag):它是一个附属于字段的字符串,可以是文档或其他的重要标记。标签的内容不可以在一般的编程中使用,只有包 reflect 能获取它。我们将在下一章(第 11.10 节中深入的探讨 reflect 包,它可以在运行时自省类型、属性和方法,比如:在一个变量上调用 reflect.TypeOf() 可以获取变量的正确类型,如果变量是一个结构体类型,就可以通过 Field 来索引结构体的字段,然后就可以使用 Tag 属性。

示例 10.7 struct_tag.go

  1. package main
  2. import (
  3. "fmt"
  4. "reflect"
  5. )
  6. type TagType struct { // tags
  7. field1 bool "An important answer"
  8. field2 string "The name of the thing"
  9. field3 int "How much there are"
  10. }
  11. func main() {
  12. tt := TagType{true, "Barak Obama", 1}
  13. for i := 0; i < 3; i++ {
  14. refTag(tt, i)
  15. }
  16. }
  17. func refTag(tt TagType, ix int) {
  18. ttType := reflect.TypeOf(tt)
  19. ixField := ttType.Field(ix)
  20. fmt.Printf("%v\n", ixField.Tag)
  21. }

输出:

  1. An important answer
  2. The name of the thing
  3. How much there are

链接