在未匯出的結構中使用型別轉換
在Go 中,您無法為結構中的相同欄位定義多個JSON 標記。但是,有一種解決方法,可以在未導出的結構之間使用強制轉換。
首先,使用不同的JSON 標籤建立兩個結構相同的結構,如您的範例所示:
type Foo struct { Name string `json:"name"` Age int `json:"age"` } type Bar struct { Name string `json:"employee_name"` // Age omitted with backtick syntax Age int `json:"-"` }
現在,讓Bar 不導出其名稱以小寫字母開頭:
type bar struct { Name string `json:"employee_name"` Age int `json:"-"` }
要從Foo 轉換為bar,請轉換Foo到*欄,如下所示:
f := Foo{Name: "Sam", Age: 20} b := (*bar)(unsafe.Pointer(&f)) // b now has the modified JSON tags
注意事項:
範例:
package main import "fmt" import "unsafe" type Foo struct { Name string `json:"name"` Age int `json:"age"` } type bar struct { Name string `json:"employee_name"` Age int `json:"-"` } func main() { f := Foo{Name: "Sam", Age: 20} b := (*bar)(unsafe.Pointer(&f)) fmt.Println(b.Name, b.Age) // Output: Sam 0 // Changing f.Age affects b.Age f.Age = 30 fmt.Println(b.Name, b.Age) // Output: Sam 30 }
以上是如何使用未匯出的結構和類型轉換來解決 Go 的 JSON 標籤限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!