Nell’articolo precedente abbiamo visto i tipi semplici messi a disposizione da GO, in questo vediamo come definire delle strutture dati più complesse. Go mette a disposizione il comando type che consente di definire delle strutture, ovvero collezioni di dati
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package main import "fmt" type persona struct { nome string cognome string } func main() { var io persona io.cognome = "finazzo" io.nome = "valerio" fmt.Println(io) var sempreio = persona{"valerio", "finazzo"} fmt.Println(sempreio) var ancoraio = persona{nome: "valerio", cognome: "finazzo"} fmt.Println(ancoraio) } |
Tramite il comando type persona struct ho definito una struttura dati chiamata persona che presenta 2 attributi nome e cognome di tipo string. Nel main ho instanziato la variabile persona e valorizzato gli attributi opportunamente usando il . per accedere alle sue varibili. Go permette di inizializzare direttamente l’oggetto tramite il nome stesso della struttura passando direttamente i valori, oppure specificando i valori con la coppia nome valore separati da :.
Go supporta i puntatori, ovvero il riferimento a zone di memoria per accedere al valore contenuto in esso. I comandi per gestire i puntatori sono * e &.
1 2 3 4 5 6 7 8 9 10 11 |
var puntatoreame *persona = &io fmt.Println(puntatoreame.nome, puntatoreame.cognome) puntatoreame.cognome = "finazzo2" fmt.Println(puntatoreame.nome, puntatoreame.cognome) fmt.Println(io.nome, io.cognome) var nuovamenteio persona = io fmt.Println(nuovamenteio) nuovamenteio.cognome = "finazzo3" fmt.Println(nuovamenteio.nome, nuovamenteio.cognome) fmt.Println(io.nome, io.cognome) |
Tramite * definisco un puntatore verso una struttura di tipo persona e tramite & la inizializzo verso la zona di memoria occupata dalla struttura io. A questo punto agisco su uno degli attributi di puntatoreame e vedrò le modifiche attive anche su io.
Il blocco successivo che non usa i puntatori crea una nuova variabile che ha gli stessi valori ma le modifiche che faccio successivamente non si ripercuotono sulla istanza io.