go struct 的 tag


语法

在Go语言中,结构体(struct)可以通过添加tag来为结构体中的字段添加元数据,例如序列化、反序列化等操作的配置信息。

结构体tag是一个以反引号(`)包含的键值对列表,其中键与值之间使用冒号(:)分隔,键值对之间使用空格分隔。tag的格式如下所示:

`key1:"value1" key2:"value2"`

其中,key是一个字符串,代表tag的名字,value可以是任何合法的字符串,代表tag的值。一个结构体中的字段可以有多个tag,每个tag之间使用空格分隔。例如:

type User struct {
    Name     string `json:"name" xml:"name"`
    Password string `json:"-" xml:"-"`
    Age      int    `json:"age" xml:"age"`
}

在这个例子中,User结构体中的每个字段都有一个tag。Name字段的tag为json:"name" xml:"name",表示当将User结构体序列化成JSON或XML格式时,Name字段应该使用”name”作为键。Password字段的tag为json:"-" xml:"-",表示当将User结构体序列化成JSON或XML格式时,Password字段应该被忽略。Age字段的tag为json:"age" xml:"age",表示当将User结构体序列化成JSON或XML格式时,Age字段应该使用”age”作为键。

需要注意的是,tag是在编译时解析的,因此在运行时无法修改tag的值。

总结起来就是:反引号括起来,key不加双引号,value加双引号,多个值中间用空格分开

常见实例

json

package main

import (
	"encoding/json"
	"fmt"
)

type Gopher struct {
	Name   string `json:"name,omitempty"`
	Age    int    `json:"age,omitempty"`
	Gender string `json:"gender,omitempty"`
}

func main() {
	master := Gopher{
		Name:   "Anubis",
		Age:    20,
		Gender: "man",
	}
	out, err := json.MarshalIndent(master, "", "    ")
	if err != nil {
		fmt.Println(err)
		panic(err)
	}
	fmt.Println(string(out))
}

xml

package main

import (
	"encoding/xml"
	"fmt"
)

type Gopher struct {
	Name   string `xml:"name,omitempty"`
	Age    int    `xml:"age,omitempty"`
	Gender string `xml:"gender,omitempty"`
}

func main() {
	master := Gopher{
		Name:   "Anubis",
		Age:    20,
		Gender: "man",
	}
	out, err := xml.MarshalIndent(master, "", "    ")
	if err != nil {
		fmt.Println(err)
		panic(err)
	}
	fmt.Println(string(out))
}


如果本文帮助到了你,帮我点个广告可以咩(o′┏▽┓`o)


评论
  目录