go语言中StructTag读取

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wyy626562203/article/details/83626447

go语言中StructTag读取

通过反射来读取StructTag

package main

import (
	"encoding/json"
	"fmt"
	"reflect"
)

type Message struct {
	Name string `json:"myname"`      	// 对应JSON的myname
	Body string `json:"mybody,omitempty"` 	// 如果为空置则忽略字段
	Time int64  `json:"-"`              	// 忽略该字段
	Age  int8   `json:",omitempty"`     	// 没有指定字段名,JSON中使用Age为字段名
}

type Tag1 struct {
	Name   string "user name" 			//这引号里面的就是tag
	Passwd string "user passsword"
}

type Tag2 struct {
	Name string `firstname:"wang" lastname:"xixi"`
}

func main() {

	/****************1****************/
	fmt.Println("****************1****************")
	m := Message{Name: "Alice", Body: "", Time: 123,Age:18}
	data, err := json.Marshal(m)
	if err != nil {
		fmt.Printf(err.Error())
		return
	}
	fmt.Println(string(data))

	/****************2****************/
	fmt.Println("****************2****************")
	tag1 := Tag1{}
	t1 := reflect.TypeOf(tag1) //通过反射获取type定义
	for i := 0; i < t1.NumField(); i++ {
		fmt.Println(t1.Field(i).Tag) //将tag输出出来
	}

	/****************3****************/
	fmt.Println("****************3****************")
	tag2 := Tag2{}
	t2 := reflect.TypeOf(tag2)
	field := t2.Field(0)
	fmt.Println(field.Tag.Get("firstname"), field.Tag.Get("lastname"))
}

输出

****************1****************
{"myname":"Alice","Age":18}
****************2****************
user name
user passsword
****************3****************
wang xixi

猜你喜欢

转载自blog.csdn.net/wyy626562203/article/details/83626447
今日推荐