English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base Golang

Controllo (Control Flow) Golang

Funzione & Metodo Golang

Struttura (Struct) Golang

Tagli (Slice) & Array Golang

Stringa (String) Golang

Puntatore (Pointer) Golang

Interfaccia (Interface) Golang

Concordanza (Concurrency) Golang

Eccezioni (Error) Golang

Altri argomenti Golang

Struttura (struct) in Go Linguaggio

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}

Puntatore alla struttura

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