前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Go] go语言中的结构体标签

[Go] go语言中的结构体标签

作者头像
唯一Chat
发布2021-09-15 12:33:19
4200
发布2021-09-15 12:33:19
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地

当在进行json的序列化时经常用到,结构体标签对于go本身来说就是注释

但是可以通过反射获取到标签的内容,所以很多包都可以有自己的作用

具体原理就是反射实现

代码语言:javascript
复制
package v2

type VisitorLoginForm struct {
    VisitorId string `form:"visitor_id" json:"visitor_id" uri:"visitor_id" xml:"visitor_id"`
    Refer     string `form:"refer" json:"refer" uri:"refer" xml:"refer"`
    ReferUrl  string `form:"refer_url" json:"refer" uri:"refer" xml:"refer"`
    Url       string `form:"url" json:"url" uri:"url" xml:"url"`
    ToId      string `form:"to_id" json:"to_id" uri:"to_id" xml:"to_id"  binding:"required"`
    EntId     string `form:"ent_id" json:"ent_id" uri:"ent_id" xml:"ent_id" binding:"required"`
    Avator    string `form:"avator" json:"avator" uri:"avator" xml:"avator"`
    UserAgent string `form:"user_agent" json:"user_agent" uri:"user_agent" xml:"user_agent"`
}
代码语言:javascript
复制
package v2

import (
    "fmt"
    "reflect"
    "testing"
)

func TestStructTag(t *testing.T) {
    form := VisitorLoginForm{
        VisitorId: "121212",
        ReferUrl:  "http://",
    }
    formRef := reflect.TypeOf(form)
    fmt.Println("Type:", formRef.Name())
    fmt.Println("Kind:", formRef.Kind())
    for i := 0; i < formRef.NumField(); i++ {
        field := formRef.Field(i)
        tag := field.Tag.Get("json")
        fmt.Printf("%d. %v (%v), tag: '%v'\n", i+1, field.Name, field.Type.Name(), tag)
    }
}

可以获取到字段内容,标签内容

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档