golang结构体标签
golang标签介绍
在 Go 语言中,结构体字段可以使用标签(Tag)来附加元数据。标签是包含在字段声明的后方,由一对反引号括起来的字符串,例如:json:“name”。在使用标签时,需要使用反射的相关函数来解析和使用标签的值。标签和反射一起使用,为我们提供了在运行时动态处理结构体字段的能力,例如通过标签解析结构体,并根据标签的值进行字段映射、表单验证、JSON 或数据库的序列化与反序列化等操作。
在Go语言中,结构体标签(tags)是为了在进行序列化和反序列化操作时提供元数据,比如在JSON序列化中指定字段的名称,或者在数据库操作中指定字段的列名。
结构体标签遵循如下格式:
type MyStruct struct {
    FieldName fieldType `tag1:"value1" tag2:"value2"`
}
例如,以下是一个使用结构体标签的Go代码示例,其中的结构体被用于JSON序列化和反序列化:
package main
 
import (
    "encoding/json"
    "fmt"
)
 
type Person struct {
    Name    string `json:"name"`
    Age     int    `json:"age"`
    Address string `json:"address,omitempty"` // omitempty表示如果字段为空则不包含在JSON中
}
 
func main() {
    p := Person{
        Name: "John Doe",
        Age:  30,
    }
 
    // 序列化
    jsonBytes, err := json.Marshal(p)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(jsonBytes))
 
    // 反序列化
    var p2 Person
    if err := json.Unmarshal(jsonBytes, &p2); err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("%+v\n", p2)
}
在这个例子中,Person结构体的字段使用了json:"name"这样的标签,这告诉json.Marshal函数如何将结构体字段序列化为JSON,以及json.Unmarshal函数如何将JSON数据反序列化到结构体字段中。
    Do not communicate by sharing memory; instead, share memory by communicating.

                
            
        
浙公网安备 33010602011771号