package main
import (
"fmt"
"reflect"
)
func main() {
// 如何获取结构体标签?
type Person struct {
name string "姓名"
age int32 "年龄"
blog string "博客"
}
p1 := Person{name: "马亚南", age: 28, blog: "http://www.mayanan.cn"}
p1Type := reflect.TypeOf(p1)
// 方式一:
field1 := p1Type.Field(0) // 通过索引获取
fmt.Println(field1.Tag, field1.Name) // 姓名 name
// 方式二:
// blog存在时,_为true,blog不存在时,_为false
field2, _ := p1Type.FieldByName("blog") // 通过名称获取
fmt.Println(field2.Tag, field2.Name) // 博客 blog
// 循环获取结构体中的所有字段名和标签
fieldNum := p1Type.NumField() // 获取字段总数
for index := 0; index < fieldNum; index++ {
field := p1Type.Field(index) // 通过索引获取
fmt.Println(field.Tag, field.Name)
}
}