当在进行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)
}
}
可以获取到字段内容,标签内容