什么是tag
Tag是結構體中某個字段別名, 可以定義多個, 空格分隔
type Student struct { Name string `ak:"av" bk:"bv" ck:"cv"` }
使用空格來區分多個tag,所以格式要尤為注意
tag的作用
tag相當於該字段的一個屬性標簽, 在Go語言中, 一些包通過tag來做相應的判斷
舉個例子, 比如我們有一個結構體
type Student struct { Name string }
然后我們將一個該結構體實例化一個 s1
s1 := Student{ Name: "s1", }
再將 s1 序列化
v, err := json.Marshal(s1) // json.Marshal方法,json序列化,返回值和報錯信息 if err != nil { // 不為nil代表報錯 fmt.Println(err) } fmt.Println(string(v)) // []byte轉string, json
此時 string(v) 為
{ "Name": "s1" }
因為在 Go 語言中, 結構體字段要想為外部所用就必須首字母大寫, 但是如果這個 s1 是返回給前端的, 那每個字段都首字母大寫就很怪, 此時我們可以給 Student 加tag解決
結構體修改為
type Student struct { Name string`json:"name"` }
序列化時, 會自己找到名為 json 的tag, 根據值來進行json后的賦值
因此 string(v) 為
{ "name": "s1" }
常用tag記錄
json
json序列化或反序列化時字段的名稱
db
sqlx模塊中對應的數據庫字段名
form
gin框架中對應的前端的數據字段名
binding
搭配 form 使用, 默認如果沒查找到結構體中的某個字段則不報錯值為空, binding為 required 代表沒找到返回錯誤給前端