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<t.NumField();i++{
     sf:=t.Field(i)
     fmt.Println(sf.Tag)
   }
}

獲取字段上一篇我們提到過,獲取字段后,調用.Tag就獲取到對應的Tag字段了。

字段Tag的鍵值對

很多時候我們的一個Struct不止具有一個功能,比如我們需要JSON的互轉、還需要BSON以及ORM解析的互轉,所以一個字段可能對應多個不同的Tag,以便滿足不同的功能場景。

Go Struct 為我們提供了鍵值對的Tag,來滿足我們以上的需求。

func main() {
   var u User
   t:=reflect.TypeOf(u)   
   for i:=0;i<t.NumField();i++{
     sf:=t.Field(i)
     fmt.Println(sf.Tag.Get("json"))
   }
}
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<t.NumField();i++{
     sf:=t.Field(i)
     fmt.Println(sf.Tag.Get("json"),",",sf.Tag.Get("bson"))
   }
}
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://m.kartarina.com/article20/cdcjjo.html

成都網站建設公司_創新互聯,為您提供做網站手機網站建設面包屑導航響應式網站網站內鏈網站導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司
主站蜘蛛池模板: 国产成人无码A区精油按摩| 人妻少妇看A偷人无码精品 | 国产精品无码无需播放器| 亚洲午夜福利精品无码| 亚洲色无码专区在线观看| 综合无码一区二区三区四区五区| 人妻精品无码一区二区三区| 亚洲精品无码专区久久久| 国产精品无码久久综合网| 亚洲av永久无码精品国产精品| 精品人妻无码一区二区色欲产成人| 国产麻豆天美果冻无码视频| 人妻丰满熟妇av无码区不卡| 国产精品无码无片在线观看| yy111111少妇无码影院| 久久亚洲精品无码gv| 中文字幕无码高清晰| 久久无码专区国产精品| 亚洲精品无码激情AV| 亚洲精品av无码喷奶水糖心| 午夜福利av无码一区二区| 高潮潮喷奶水飞溅视频无码| 97无码免费人妻超级碰碰碰碰 | 无码精品人妻一区二区三区免费看| 精品久久久久久无码中文野结衣| 无码中文字幕日韩专区| 国产成人精品无码片区在线观看| 精品无码国产自产拍在线观看蜜 | 中文字幕精品三区无码亚洲 | 国产白丝无码免费视频| 一本久道中文无码字幕av| 免费无码午夜福利片69| 天堂无码在线观看| 国产午夜精华无码网站| 中文字幕精品无码久久久久久3D日动漫| 亚洲av无码专区在线观看下载| 亚洲中文字幕无码一去台湾| 伊人无码精品久久一区二区| 亚洲AV无码男人的天堂| 亚洲欧洲国产综合AV无码久久| 亚洲GV天堂GV无码男同|