《轉》Go語言struct tag介紹

2022-09-04 02:00:10 字數 1431 閱讀 8204

一、tag說明

先介紹一下``(反引號):反引號用來建立原生的字串字面量,這些字串可能由多行組成(不支援任何轉義序列),原生的字串字面量多用於書寫多行訊息、html以及正規表示式。

在處理json格式字串的時候,經常會看到宣告struct結構的時候,屬性的右側還有反引號括起來的內容。如下:

type user struct

要比較詳細的了解這個,要先了解一下golang的基礎,在golang中,命名都是推薦都是用駝峰方式,並且在首字母大小寫有特殊的語法含義:包外無法引用。但是由經常需要和其它的系統進行資料互動,例如轉成json格式,儲存到mongodb啊等等。這個時候如果用屬性名來作為鍵值可能不一定會符合專案要求。

所以呢就多了反引號的內容,在golang中叫標籤(tag),在轉換成其它資料格式的時候,會使用其中特定的字段作為鍵值。例如上例在轉成json格式:

u := &user

j, _ := json.marshal(u)

fmt.println(string(j))

// 輸出內容:

如果在屬性中不增加標籤說明,則輸出:

可以看到直接用struct的屬性名做鍵值。

其中還有乙個bson的宣告,這個是用在將資料儲存到mongodb使用的。

二、tag獲取

那麼當我們需要自己封裝一些操作,需要用到tag中的內容時,如何去獲取呢?這邊可以使用反射包(reflect)中的方法來獲取:

package main

import (

"encoding/json"

"fmt"

"reflect")

func main()

// 輸出json格式

u := &user

j, _ := json.marshal(u)

fmt.println(string(j)) // 輸出內容:

// 獲取tag中的內容

t := reflect.typeof(u)

field := t.elem().field(0)

fmt.println(field.tag.get("json")) // 輸出:user_id

fmt.println(field.tag.get("bson")) // 輸出:user_id

}

package main

import (

"fmt"

"reflect" // 這裡引入reflect模組)

type user struct

func main()

s := reflect.typeof(user).elem() //通過反射獲取type定義

for i := 0; i < s.numfield(); i++

}

GO語言中的StructTag型別

structtag是什麼?在go語言裡,structtag是乙個標記字串,此字串可跟隨在struct中欄位定義的後面。structtag就是一系列的 key value 形式的組合,其中key是乙個不可為空的字串,key value組合可以有多個,空格分隔。structtag有什麼用?structt...

Go 結構體標籤(Struct Tag)

在處理json格式字串的時候,經常會看到宣告struct結構的時候,屬性的右側還有小公尺點括起來的內容。形如 1 type user struct 這個小公尺點裡的內容是用來幹什麼的呢?要比較詳細的了解這個,要先了解一下golang的基礎,在golang中,命名都是推薦都是用駝峰方式,並且在首字母大...

GO語言01 介紹 環境搭建

go 即golang,是google公司2009年11月正式對外公開的一門程式語言,go是靜態強型別語言,是區別於解析型語言的編譯型語言。1.跨平台的編譯型語言 2.語法接近c語言 3.管道 channel 切片 slice 併發 routine 4.有垃圾 的機制 5.支援物件導向和面向過程的程式...