Files
the-way-to-go_ZH_CN/eBook/10.4.md
2015-07-09 23:05:48 +08:00

1.4 KiB
Raw Blame History

10.4 带标签的结构体

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

Listing 10.7—struct_tag.go展示了如何使用它

package main

import (
   "fmt"
   "reflect"
)

type TagType struct { // tags
   field1 bool   "An important answer"
   field2 string "The name of the thing"
   field3 int    "How much there are"
}

func main() {
   tt := TagType{true, "Barak Obama", 1}
   for i := 0; i < 3; i++ {
   	refTag(tt, i)
   }
}

func refTag(tt TagType, ix int) {
   ttType := reflect.TypeOf(tt)
   ixField := ttType.Field(ix)
   fmt.Printf("%v\n", ixField.Tag)
}

输出:

An important answer
The name of the thing
How much there are

链接