go语言struct中的tag

一句话总结:方便通过tag获取struct的成员变量

为什么要有tag

go语言中命名都是推荐都是用驼峰方式,但是由于实际项目中经常需要和其它的系统进行数据交互,这个时候如果用属性名来作为键值可能不一定会符合项目要求。如代码中对象的结构体的成员变量和数据库表中的列名的映射关系的建立是通过struct Tag来实现的。

如何获取tag

直接上实例吧

package main

import (
    "fmt"

    "encoding/json"
    "reflect"
)


type Person struct {
    Name string `name`
    Age int `age`
    Addr string `China:"beijing"` //beijing一定要有冒号,否则认为是个字符串,不会认为是个map
    phone string `phone`
}

func main() {
    person := &Person{Name:"simon", Age:22, Addr:"road88"}

    jsonData, err := json.Marshal(person) //成员必须大写可见
    if err != nil {
        panic("json Marshl err")
    }
    fmt.Println("phone member is invisible.")
    fmt.Println(string(jsonData))

    reflectType := reflect.TypeOf(person)
    field := reflectType.Elem().Field(0)
    fmt.Println("field 0 tag:", field.Tag)

    field = reflectType.Elem().Field(2)
    fmt.Println("field 2 tag:", field.Tag)
    fmt.Println("field 2 tag:", field.Tag.Get("China"))

    field = reflectType.Elem().Field(3)
    fmt.Println("field 3 tag:", field.Tag)
}

运行结果

phone member is invisible.
{“Name”:”simon”,”Age”:22,”Addr”:”road88”}
field 0 tag: name
field 2 tag: China:”beijing”
field 2 tag: beijing
field 3 tag: phone

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值