Golang 语言 Struct 中字段的 Tag 怎么使用?

 [[410625]]

01介绍

在 Golang 语言中,我们可以使用反单引号为 Struct 中的字段设置 Tag,通过 Tag 可以为 Struct 中的字段定义附加属性。Tag 实际上就是一个字符串,只不过有特定的格式,也就是说 Tag 字符串必须由 key:"value"组成,key 必须是非空字符串,value 必须由双引号引起来。

公司主营业务:成都网站建设、网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出梁子湖免费做网站回馈大家。

其中,每个 key 都是一个非空字符串,由除空格 (U+0020 ' ')、引号 (U+0022 '"') 和冒号 (U+003A ':') 以外的非控制字符组成;每个 value 都使用 U+0022 '"' 字符和 Go 字符串语法引用。

示例代码:

 
 
 
 
  1. type User struct { 
  2.     Id uint64 `json:"id"` 
  3.     Name string `json:"name"` 

02操作 Struct 字段中的 Tag

在 Golang 语言中,可以使用标准库 reflect 包操作 Struct 中的 Tag。在 reflect 包中,使用一个 StructField 表示 Struct 中的一个字段。

reflect 包源码:

 
 
 
 
  1. type StructField struct { 
  2.     Name string 
  3.     PkgPath string 
  4.     Type      Type      // field type 
  5.     Tag       StructTag // field tag string 
  6.     Offset    uintptr   // offset within struct, in bytes 
  7.     Index     []int     // index sequence for Type.FieldByIndex 
  8.     Anonymous bool      // is an embedded field 

阅读上面这段代码,可以看出 Tag 也是 Struct 中的一个字段的组成部分,Tag 的类型是 StructTag,实际上它是一个 string 类型的别名。

 
 
 
 
  1. type StructTag string 

StructTag 提供了 Get 方法 func (tag StructTag) Get(key string) string,可以通过给定参数 key 获取关联 value 的值。如果 Tag 中没有该 key,Get 返回空字符串。

示例代码:

 
 
 
 
  1. func GetTag () { 
  2.     u := User{} 
  3.     ut := reflect.TypeOf(u) 
  4.     for i := 0; i < ut.NumField(); i++ { 
  5.         fmt.Printf("字段:%s,标签:%s\n", ut.Field(i).Name, ut.Field(i).Tag.Get("json")) 
  6.     } 

其实,标准库 json 包转换 struct 为 JSON 字符串也是使用的类似的方法。

03总结

本文我们介绍了 Struct 字段中的 Tag 是什么,同时介绍了如何使用标准库 reflect 包操作 Struct 字段中的 Tag,实际上 Tag 只是一个字符串,reflect 包可以通过 Tag 作为参考条件,操作 Struct 字段。关于 reflect 包的更多介绍,感兴趣的读者可以翻阅之前的文章。

本文转载自微信公众号「Golang语言开发栈」,可以通过以下二维码关注。转载本文请联系Golang语言开发栈公众号。

文章标题:Golang 语言 Struct 中字段的 Tag 怎么使用?
文章路径:http://www.shufengxianlan.com/qtweb/news14/161464.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联