Go struct tag介绍

什么是struct的tag?

1
2
3
4
type User struct {
    Name   string `user name`
    Passwd string `user password`
}

上面代码里“中间的部分就是tag。

tag能用来干什么?
tag一般用于表示一个映射关系,最常见的是json解析中:

1
2
3
4
type User struct {
    Name   string `json:"name"`
    Passwd string `json:"password"`
}

这个代码里,解析时可以把json中”name”解析成struct中的”Name”(大小写不一样)。

tag定义必须用键盘ESC键下面的那个吗?
不是,用双引号也可以:

1
2
3
4
type User struct {
    Name string "user name"
    Passwd string "user passsword"
}

怎么获取struct的tag?
用反射:
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
    "fmt"
    "reflect" // 这里引入reflect模块
)

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

func main() {
    user := &User{"chronos", "pass"}
    s := reflect.TypeOf(user).Elem() //通过反射获取type定义
    for i := 0; i < s.NumField(); i++ {
        fmt.Println(s.Field(i).Tag) //将tag输出出来
    }
}

输出结果:
json:”name”
json:”password”

Go struct tag介绍》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注