资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

Go语言之StructTag-创新互联

在上一篇介绍Go反射的时候,提到了如何通过反射获取Struct的Tag,这一篇文章主要就是介绍这个的使用和原理,在介绍之前我们先看一下JSON字符串和Struct类型相互转换的例子。

成都创新互联公司从2013年开始,是专业互联网技术服务公司,拥有项目成都网站设计、网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元韶山做网站,已为上家服务,为韶山各地企业和个人服务,联系电话:18982081108

JSON字符串对象转换

func main() {
   var u User
   h:=`{"name":"张三","age":15}`
   err:=json.Unmarshal([]byte(h),&u)   
   if err!=nil{
     fmt.Println(err)
   }else {
     fmt.Println(u)
   }
}
type User struct{   Name string `name`   Age int `age`
}

上面这个例子就是Json字符串转User对象的例子,这里主要利用的就是User这个结构体对应的字段Tag,json解析的原理就是通过反射获得每个字段的tag,然后把解析的json对应的值赋给他们。

利用字段Tag不光可以把Json字符串转为结构体对象,还可以把结构体对象转为Json字符串。

 newJson,err:=json.Marshal(&u)
 fmt.Println((string(newJson)))

接着刚刚的例子,这样就可以转为一个新的字符串了,通过打印输出,可以看到和开始输入的字符串一样。

反射获取字段Tag

字段的Tag是标记到字段上的,所以我们可以通过先获取字段,然后再获取字段上的Tag。

func main() {
   var u User

   t:=reflect.TypeOf(u)   
   for i:=0;i}

获取字段上一篇我们提到过,获取字段后,调用.Tag就获取到对应的Tag字段了。

字段Tag的键值对

很多时候我们的一个Struct不止具有一个功能,比如我们需要JSON的互转、还需要BSON以及ORM解析的互转,所以一个字段可能对应多个不同的Tag,以便满足不同的功能场景。

Go Struct 为我们提供了键值对的Tag,来满足我们以上的需求。

func main() {
   var u User
   t:=reflect.TypeOf(u)   
   for i:=0;i}
type User struct{   Name string `json:"name"`   Age int `json:"age"`
}

以上的例子,使用了键值对的方式配置Struct Tag,Key-Value以冒号分开,这里的Key为json,所以我们可以通过这个Key获取对应的值,也就是通过.Tag.Get("json"))方法。Get方法就是通过一个Key获取对应的tag设置。

除此之外,我们还可以设置多个Key,来满足我们上面说的场景。

func main() {
   var u User
   t:=reflect.TypeOf(u)   
   for i:=0;i}
type User struct{   Name string `json:"name" bson:"b_name"`   Age int `json:"age" bson:"b_age"`
}

多个Key使用空格进行分开,然后使用Get方法获取不同Key的值。

Struct Tag可以提供字符串到Struct的映射能力,以便我们作转换,除此之外,还可以作为字段的元数据的配置,提供我们需要的配置,比如生成Swagger文档等。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:Go语言之StructTag-创新互联
网站链接:http://cdkjz.cn/article/cdcjjo.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220