Go 結構體標籤詳解
Go 結構體標籤詳解
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/benben_2015/article/details/79807792
Go結構體標籤
結構體的欄位除了名字和型別外,還可以有一個可選的標籤(tag):它是一個附屬於欄位的字串,可以是文件或其他的重要標記。比如在我們解析json或生成json檔案時,常用到encoding/json包,它提供一些預設標籤,例如:omitempty
標籤可以在序列化的時候忽略0值或者空值。而-
標籤的作用是不進行序列化,其效果和和直接將結構體中的欄位寫成小寫的效果一樣。
type Info struct {
Name string
Age int `json:"age,omitempty"`
Sex string
}
在序列化和反序列化的時候,也支援型別轉化等操作。如
type Info struct {
Name string
Age int `json:"age,string"`
//這樣生成的json物件中,age就為字串
Sex string
}
現在來了解下如何設定自定義的標籤,以及如何像官方包一樣,可以通過標籤,對欄位進行自定義處理。要實現這些,我們要用到reflect
包。
package main
import (
"fmt"
"reflect"
)
const tagName = "Testing"
type Info struct {
Name string `Testing:"-"`
Age int `Testing:"age,min=17,max=60"`
Sex string `Testing:"sex,required"`
}
func main() {
info := Info{
Name: "benben",
Age: 23,
Sex: "male",
}
//通過反射,我們獲取變數的動態型別
t := reflect.TypeOf(info)
fmt.Println("Type:", t.Name())
fmt.Println("Kind:", t.Kind())
for i := 0; i < t.NumField(); i++ {
field := t.Field(i) //獲取結構體的每一個欄位
tag := field.Tag.Get(tagName)
fmt.Printf("%d. %v (%v), tag: '%v'\n", i+1, field.Name, field.Type.Name(), tag)
}
}
這些標籤也起到配置資訊的作用,不過在實際工作中,為了程式碼更直觀,這些應該放到配置資訊裡。
相關文章
- input 標籤詳解
- img標籤詳解
- ANT標籤詳解
- HTML標籤詳解HTML
- 常用的HTML標籤詳解與總結HTML
- Struts標籤庫詳解
- HTML簡介,結構,標籤以及標籤語義HTML
- 詳解 Go 空結構體的 3 種使用場景Go結構體
- POM.xml 標籤詳解XML
- Git tag標籤用法詳解Git
- HTML常見標籤詳解HTML
- struts2標籤詳解 .
- Go結構體標籤表示式v1.0釋出,引數校驗殺手鐗Go結構體
- Go 結構體Go結構體
- MySQL體系結構詳解MySql
- springmvc常用註解標籤詳解SpringMVC
- dedecms模板標籤dede:channelartlist詳解
- spring xml配置標籤詳解SpringXML
- 自定義分頁標籤詳解
- mybatis中foreach標籤詳解MyBatis
- HTML5標籤embed詳解HTML
- Maven中optional標籤詳解(轉)Maven
- Go標準庫:Go template用法詳解Go
- MySQL體系結構圖詳解MySql
- 【00】Oracle體系結構詳解Oracle
- HTML5常見標籤詳解HTML
- Struts2的OGNL標籤詳解
- HTML表單標籤詳解:如何用HTML標籤打造互動網頁?HTML網頁
- Golang中struct結構標籤(Tag)的使用GolangStruct
- JVM之記憶體結構詳解JVM記憶體
- HTML常用基礎標籤:圖片與超連結標籤全解!HTML
- Go 語言 結構體Go結構體
- c 結構體記憶體對齊詳解結構體記憶體
- 結構詳解
- 標籤實現預載入功能詳解
- JavaScript物件導向修改標籤頁詳解JavaScript物件
- maven中的scope標籤類別詳解Maven
- 詳細瞭解HTML標籤內容模型HTML模型