结构体标签根据传统,它是由空格分隔的键值对,每个key不能是空的字符串。由于包含的是键值对,所以一般字符串是以语义字符串的形式出现。例如:
package main
import (
"fmt"
"reflect"
)
func main() {
type S struct {
F string `species:"gopher" color:"blue"`
}
s := S{
}
st := reflect.TypeOf(s)
field := st.Field(0)
fmt.Println(field.Tag.Get("color"), field.Tag.Get("species"))
}
函数解析
TypeOf函数
TypeOf
函数会返回interface{}
类型变量的动态类型,如果是一个空接口,那么返回值为nil
。
func TypeOf(i interface{
}) Type {
//...
}
type Type interface {
// ...
Field(i int) StructField // Field会返回结构体中第i个字段。i的值必须在[0,NumField())范围内。
FieldByName(name string) (StructField, bool) // FieldByName会返回给定名称的结构体字段,bool值用来表示是否查找到
NumField() int // NumField返回结构体字段的数量
}
type StructField struct</