Utilisation du transtypage de type dans des structures non exportées
Dans Go, vous ne pouvez pas définir plusieurs balises JSON pour le même champ dans une structure. Cependant, il existe une solution de contournement en utilisant le casting entre des structures non exportées.
Tout d'abord, créez deux structures de structure identique avec des balises JSON différentes, comme dans votre exemple :
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:"-"` }
Maintenant, rendez Bar non exporté. en commençant son nom par une lettre minuscule :
type bar struct { Name string `json:"employee_name"` Age int `json:"-"` }
Pour transformer Foo en bar, lancez Foo en *bar, comme indiqué ci-dessous :
f := Foo{Name: "Sam", Age: 20} b := (*bar)(unsafe.Pointer(&f)) // b now has the modified JSON tags
Précautions :
Exemple :
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 }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!