在未导出的结构中使用类型转换
在 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中文网其他相关文章!