type A struct {
B struct {
Some string
Len int
}
}
Question simple. Comment initialiser cette structure? Je voudrais faire quelque chose comme ça:
a := &A{B:{Some: "xxx", Len: 3}}
J'obtiens probablement une erreur:
missing type in composite literal
Bien sûr, je peux créer une structure B séparée et l'initialiser de cette façon:
type Btype struct {
Some string
Len int
}
type A struct {
B Btype
}
a := &A{B:Btype{Some: "xxx", Len: 3}}
Mais ce n'est pas aussi utile que la première façon. Existe-t-il un raccourci pour initialiser la structure anonyme?
Les règles d'attribution pardonnent aux types anonymes, ce qui conduit à une autre possibilité où vous pouvez conserver la définition originale de A
tout en permettant l'écriture de littéraux composites courts de ce type. Si vous insistez vraiment sur un type anonyme pour le champ B
, j'écrirais probablement quelque chose comme:
package main
import "fmt"
type (
A struct {
B struct {
Some string
Len int
}
}
b struct {
Some string
Len int
}
)
func main() {
a := &A{b{"xxx", 3}}
fmt.Printf("%#v\n", a)
}
Production
&main.A{B:struct { Some string; Len int }{Some:"xxx", Len:3}}