结构体中的标签

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)
	}

}

  

posted @ 2021-10-10 17:03  专职  阅读(53)  评论(0编辑  收藏  举报