Struct

Struct #

// In Go le _structs_ sono collezioni di field (campi) a cui è associato
// un tipo. Sono utili per raccogliere insieme dati in modo
// da formare dei record

package main

import "fmt"

// Questa struct `person` possiede due campi,
// rispettivamente `name` ed `age`.
type person struct {
    name string
    age  int
}

func main() {

    // Con questa sintassi si crea una nuova struct.
    fmt.Println(person{"Nicola", 20})

    // Puoi indicare il nome del campo quando crei una struct.
    fmt.Println(person{name: "Luigi", age: 30})

    // I field non indicati verrano inizializzati con
    // il loro zero-value.
    fmt.Println(person{name: "Alessandro"})

    // Inserire un `&` a prefisso della dichiarazione permetterà
    // di ottenere un puntatore alla struct
    fmt.Println(&person{name: "Luca", age: 40})

    // Puoi accedere ai campi della struct con
    // l'operatore `.` (punto).
    s := person{name: "Mario", age: 50}
    fmt.Println(s.name)

    // Puoi utilizzare il punto anche per i puntatori a struct.
    // Il puntatore verrà dereferenziato automaticamente.
    sp := &s
    fmt.Println(sp.age)

    // Le struct sono mutabili.
    sp.age = 51
    fmt.Println(sp.age)
}
$ go run structs.go
{Nicola 20}
{Luigi 30}
{Alessandro 0}
&{Luca 40}
Mario
50
51