翻译自The way to go 10.4
在go语言的一个struct中,除了变量名和类型之外,还可以选择性的增加一些tag:tag可以在类型的后面,用双引号(double quote)或重音(backquote/grave accent)表示的字符串。这些符号能被用来做文档或重要的标签。
tag里面的内容在正常编程中没有作用。只有在使用反射的时候才有作用。反射的包可以让我们在运行时获取到变量的类型,属性以及方法。比如reflect.TypeOf()就可以返回一个变量的类型。如果是一个struct类型,可以按照每一个变量索引,来查询每一个的tag。
package main
import (
"fmt"
"reflect"
)
type TagType struct {
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}
var reflectType reflect.Type = reflect.TypeOf(tt)
var ixField reflect.StructField
for i := 0; i < 3; i++ {
ixField = reflectType.Field(i)
fmt.Printf("%s\n", ixField.Tag)
}
}
输出
An important answer
The name of the thing
how much there are