Go语言反射解析结构体教程
在 中,通过 除了可以解析 的字段信息,还可以解析结构体字段的 Tag 的具体信息,我们可以根据 Tag 名,获取 Tag 的具体描述。
Go语言解析结构体Tag
StructTag 拥有一些方法,可以进行 Tag 信息的解析和提取,如下所示:
key1:"value1"key2:"value2"
Go语言解析结构体Tag
语法
personType := reflect.TypeOf(person) fieldName, isOk := personType.FieldByName("Name") jsobTagVal := fieldName.Tag.Get("json")
说明
首先,使用 reflect.TypeOf 获取类实例的信息,接着,使用 FieldByName 获取字段名的详细信息,最后,使用字段的详细信息的 Tag.Get 获取 Tag 信息。
案例
Go语言反射解析结构体Tag
通过反射解析结构体字段的 Tag 信息
package main import ( "fmt" "reflect" ) type Person struct { Name string `json:"name" bson:"Name"` Age int `json:"age" bson:"Age"` } func main() { fmt.Println("嗨客网(www.haicoder.net)") person := Person{ Name:"HaiCoder", Age:109, } personType := reflect.TypeOf(person) fieldName, isOk := personType.FieldByName("Name") if isOk{ jsonTag := fieldName.Tag.Get("json") bsonTag := fieldName.Tag.Get("bson") fmt.Println("Name Json Tag =", jsonTag, "Bson Tag =", bsonTag) }else{ fmt.Println("No Name Field") } fieldAge, isOk := personType.FieldByName("Age") if isOk{ jsonTag := fieldAge.Tag.Get("json") bsonTag := fieldAge.Tag.Get("bson") fmt.Println("Name Json Tag =", jsonTag, "Bson Tag =", bsonTag) }else{ fmt.Println("No Age Field") } }
程序运行后,控制台输出如下:
首先,我们定义了一个 Person 结构体,结构体含有两个字段,一个 类型的 Name 和一个 类型的 Age。
其中,Name 字段有两个 Tag,一个是名为 json 的 Tag,一个是名为 bson 的 Tag。Age 字段也是有一个名为 json 的 Tag和一个名为 bson 的 Tag。
reflect.TypeOf
Go语言反射解析结构体Tag总结
在 Golang 中,通过反射除了可以解析结构体的字段信息,还可以解析结构体字段的 Tag 的具体信息,我们可以根据 Tag 名,获取 Tag 的具体描述。Go 语言解析结构体 Tag 语法:
personType := reflect.TypeOf(person) fieldName, isOk := personType.FieldByName("Name") jsobTagVal := fieldName.Tag.Get("json")