Nazywa się to "struct literal" lub "anonimową strukturą" i tak naprawdę zawsze tworzysz struktury w Go, może to nie być od razu oczywiste, ponieważ możesz być przyzwyczajony do tworzenia nowych typów dla struct typy, które sprawiają, że deklarowanie ich jest nieco mniej szczegółowe.
Cała definicja struct jest w rzeczywistości typem w Go, podobnie jak int
lub []byte
lub string
. Tak jak można zrobić:
type NewType int
var a NewType = 5 // a is a NewType (which is based on an int)
czyli
a := 5 // a is an int
i oba są różne typy, które wyglądają jak wskazówki, można również zrobić to samo z kodowanym:
// a is type NewType (which is a struct{}).
type NewType struct{
A string
}
a := NewType{
A: "test string",
}
// a is type struct{A string}
a := struct{
A string
}{
A: "test string",
}
się nazwa typu (NewType
) została właśnie zastąpiona typem samej struktury, struct{A string}
. Zauważ, że nie są one tego samego typu (alias) w celu porównania lub przypisania, ale dzielą tę samą semantykę.
Nitpick: wartości w Go nie są "inizialized with 0'd values", ponieważ 'calloc()' does; są one inicjalizowane za pomocą tak zwanych "wartości zerowych" dla ich poszczególnych typów. Te wartości zerowe mogą się różnić od "wszystkich bajtów w podstawowej części pamięci wynosi 0". – kostix
@kostix tak, mówimy to samo, po prostu inaczej. –