English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La struttura (struct) in Golang è un tipo definito dall'utente che permette di raggruppare/combinare elementi di diversi tipi in un singolo tipo. Qualsiasi entità reale che possiede un insieme di attributi/campi può essere rappresentata come una struttura. Questo concetto è spesso confrontato con le classi dell'orientamento a oggetti. Può essere considerata una classe leggera che non supporta l'ereditarietà ma supporta la composizione.
Ad esempio, un indirizzo ha name, street, city, state, Pincode. Come nell'esempio seguente, queste tre proprietà possono essere combinate in una strutturaAddressHa senso.
Dichiarare la struttura:
type Address struct { name string street string city string state string Pincode int }
Sopra,typeLa parola chiave introduce un nuovo tipo. Dopo di essa c'è il nome del tipo (Address)e la parola chiavestruct,Per illustrare che stiamo definendo una struttura. La struttura contiene un elenco di campi all'interno delle parentesi graffe. Ogni campo ha un nome e un tipo.
注意:Possiamo anche combinare vari campi dello stesso tipo per renderli più compatti, come nell'esempio seguente:
type Address struct { name, street, city, state string Pincode int }
Definire la struttura:La sintassi per dichiarare una struttura:
var a Address
Il codice sopra crea unTipo AddressLe variabili, di default vengono impostate a zero. Per la struttura, zero significa che tutti i campi vengono impostati sui loro valori zero corrispondenti. Pertanto, i campi name, street, city, state vengono impostati a "", mentre Pincode viene impostato a 0.
Puoi ancheUtilizzare l'intero littorale per inizializzare le variabili di tipo struttura,如下所示:
var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
注意:
始终以在结构中声明它们的顺序传递字段值。同样,您不能仅使用上述语法初始化字段的子集。
Go还支持名称:value语法,用于初始化结构(使用此语法时字段的顺序无关紧要)。而且,这仅允许您初始化字段的子集。所有未初始化的字段均设置为其相应的零值。
例如:
var a = Address{"Akshay", "PremNagar", "Dehradun", "Uttarakhand", 252636}
package main import "fmt" //定义结构类型 type Address struct { Name string city string Pincode int } func main() { //声明一个“struct”类型的变量 //初始化所有struct字段 //其值为零 var a Address fmt.Println(a) //声明和初始化 // struct使用结构文字 a1 := Address{"Akshay", "Dehradun", 3623572} fmt.Println("Address1: ", a1) //在命名字段时 //初始化一个结构 a2 := Address{Name: "Anikaa", city: "Ballia", Pincode: 277001} fmt.Println("Address2: ", a2) //未初始化的字段设置为 //它们对应的零值 a3 := Address{Name: "Delhi"} fmt.Println("Address3: ", a3) }
Output:
{ 0} Address1: {Akshay Dehradun 3623572} Address2: {Anikaa Ballia 277001} Address3: {Delhi 0}
要访问结构的各个字段,您必须使用点(.)运算符。
package main import "fmt" //定义结构体 type Car struct { Name, Model, Color string WeightInKg float64 } func main() { c := Car{Name: "Ferrari", Model: "GTC4", Color: "Red", WeightInKg: 1920} //Accedere ai campi della struttura //Utilizzare l'operatore punto fmt.Println("Nome dell'auto: ", c.Name) fmt.Println("Colore dell'auto: ", c.Color) //Assegnare un nuovo valore //Puntatore a un campo della struttura c.Color = "Black" //Mostra il risultato fmt.Println("Auto: ", c) }
Output:
Nome dell'auto: {Ferrari} Colore dell'auto: {Rosso} Auto: {Ferrari GTC4 Black 1920}
Un puntatore in Golang è una variabile che viene utilizzata per memorizzare l'indirizzo di un'altra variabile. Puoi anche creare un puntatore a una struttura, come mostrato nell'esempio seguente:
//Puntatore alla struttura package main import "fmt" //Definire una struttura type Employee struct { firstName, lastName string age, salary int } func main() { //Passare l'indirizzo di una variabile struct //emp8 è un puntatore alla struttura Employee emp8 := &Employee{"Sam", "Anderson", 55, 6000} //(*emp8).firstName è la sintassi per accedere //Campo firstName della struttura emp8 fmt.Println("Nome: ", (*emp8).firstName) fmt.Println("Età:", (*emp8).age) }
Output:
Nome: Sam Età: 55
Golang ci offre l'opzione di utilizzare emp8.firstName invece di esplicitamente dereferenziare (*emp8).firstName per accedere al campo firstName. Ecco un esempio di come farlo:
//Puntatore alla struttura package main import "fmt" //Definire una struttura type Employee struct { firstName, lastName string age, salary int } func main() { //Ottiene un puntatore alla struttura emp8 := &Employee{"Sam", "Anderson", 55, 6000} //emp8.firstName viene utilizzato per accedere //Campo firstName fmt.Println("Nome: ", emp8.firstName) fmt.Println("Età: ", emp8.age) }
Output:
Nome: Età: 55