Golang中的结构体标签Struct Tag详解

开发 前端
结构体标记使用Key:"Value"的格式来定义,其中key是标记的名称,Value是该标记的值。一个结构体字段可以有多个标记,每个标记之间使用空格分隔。

Struct Tag

在Golang中,结构体标记(Struct Tag),也称为结构体注释(Struct Annotation),是一种对Go结构体中的字段进行元数据附加的机制。这些标记是用反引号(`)包裹起来的键值对,可以在运行时通过反射机制获取并处理。

结构体标记使用key:"value"的格式来定义,其中key是标记的名称,value是该标记的值。一个结构体字段可以有多个标记,每个标记之间使用空格分隔。

使用方法和代码示例

看一个例子:

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

注意如上结构体中反引号引起来的内容就是Golang中的Struct Tag,接下来看一下它的作用,如果输出json格式

u := &User{Name: "xiaohong", Age: "18"}
j, _ := json.Marshal(u)
fmt.Println(string(j))

输出如下内容

{"name": "xiaohong","age": 18}

如果去掉StructTag会输出什么呢,看如下例子:

type User struct {
  Name string
  Age int
}
u := &User{Name: "xiaohong", Age: "18"}
j, _ := json.Marshal(u)
fmt.Println(string(j))

输出如下内容:

{"Name": "xiaohong","Age": 18}

可以看出加上Struct Tag后,输出的内容跟着发生了变化。所以Struct Tag通常是用来在将struct编码转换的过程中提供一些转换规则信息.

一般来讲,Tag 都是以 key:"value" 键值对的形式,如果有多个键值对,用空格分隔:

type User struct {
    Name string `json:"name" xml:"name"`
}

key 一般指的是要使用的包名,比如这里的json表示这个Name字段会被 ```encoding/json```包使用和处理。

Struct Tag可以使用reflect包中的方法来获取, Struct Tag是string基本类型的别名:type StructTag string,约定俗成的规则是以 key:"value" 这样的键值对。

// 获取tag中的内容
u := &User{Name: "xiaohong", Age: "18"}
t := reflect.TypeOf(u)
field := t.Elem().Field(0)
fmt.Println(field.Tag.Get("json"))

输出内容如下:

name
责任编辑:姜华 来源: 今日头条
相关推荐

2021-07-12 05:05:59

Golang语言字段

2022-08-19 14:38:52

C语言结构体struct

2023-08-28 17:16:51

Golangio 包

2021-08-02 07:57:02

Struct指针函数

2021-11-02 14:54:41

Go结构体标签

2009-08-13 14:46:03

C#结构体定义

2021-08-02 07:02:18

数据结构体Struct

2021-11-15 06:56:46

Go语言Tag

2022-01-09 23:04:19

语言打印结构体

2010-05-24 18:32:16

SVN中tag bra

2009-08-13 15:41:50

C#结构体指针

2023-11-27 15:02:37

BytesGolang

2023-05-29 09:25:38

GolangSelect

2023-03-30 07:52:03

Golang接口

2023-06-27 08:45:19

原子操作Golang

2023-08-03 08:48:07

Golang接口

2011-04-11 13:00:08

C++结构体枚举

2023-08-31 09:28:12

Golang可导出函数

2023-08-02 09:07:27

Golangio 包

2023-10-18 08:22:38

BufioGolang
点赞
收藏

51CTO技术栈公众号