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

2021-09-15 12:33:19 浏览数 (1)

当在进行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)
    }
}

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

0 人点赞