Go語言從入門到放棄(結構體常見的tag)


什么是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 代表沒找到返回錯誤給前端

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM