Menu
Coddy logo textTech

Go Cheat Sheet

Ultimo aggiornamento

Hello World e struttura del programma

Ogni programma Go vive in un package; il punto di ingresso è func main nel package main.

OperazioneSintassi
Dichiarazione del packagepackage main
Importare un packageimport "fmt"
Importare più packageimport (\n "fmt"\n "os"\n)
Punto di ingressofunc main() { ... }
Stampare una rigafmt.Println("Hello, World!")
Stampa formattatafmt.Printf("%d items\n", n)
Eseguire un filego run main.go
Compilare un binariogo build

Variabili e tipi

Go è tipizzato staticamente ma può dedurre i tipi con :=.

OperazioneSintassi
Dichiarare con il tipovar age int = 30
Dichiarare con inferenzavar name = "Ada"
Dichiarazione brevecount := 0
Più variabili insiemex, y := 1, 2
Costanteconst Pi = 3.14
Valori zero0, "", false, nil
Tipi di baseint, float64, string, bool, byte, rune
Conversione di tipof := float64(i)

Controllo del flusso

Go ha una sola parola chiave per i cicli, for, e niente parentesi intorno alle condizioni.

OperazioneSintassi
If / elseif x > 0 { ... } else { ... }
If con istruzione di inizializzazioneif v, ok := m[k]; ok { ... }
Ciclo for (stile C)for i := 0; i < 10; i++ { ... }
Ciclo in stile whilefor x < 100 { ... }
Ciclo infinitofor { ... }
Range su una slicefor i, v := range items { ... }
Switchswitch day { case 1: ...; default: ... }
Switch senza espressioneswitch { case x > 0: ... }
Break / continuebreak, continue

Funzioni

Le funzioni sono valori di prima classe e possono restituire più risultati.

OperazioneSintassi
Funzione basefunc add(a int, b int) int { return a + b }
Parametri con tipo condivisofunc add(a, b int) int { ... }
Più valori di ritornofunc divmod(a, b int) (int, int) { return a / b, a % b }
Valori di ritorno con nomefunc split(sum int) (x, y int) { x = sum / 2; return }
Funzione variadicafunc sum(nums ...int) int { ... }
Funzione anonimaf := func() { ... }
Closurefunc counter() func() int { ... }
Defer (eseguito al return)defer file.Close()

Slice e array

Gli array hanno una dimensione fissa; le slice sono viste dinamiche sugli array.

OperazioneSintassi
Array a dimensione fissavar a [3]int
Letterale slicenums := []int{1, 2, 3}
Creare una slice con makes := make([]int, 0, 10)
Aggiungere elementis = append(s, 4)
Lunghezza / capacitàlen(s), cap(s)
Ricavare una slice da una slices[1:3]
Copiarecopy(dst, src)
Iterarefor i, v := range s { ... }

Map

Le map sono le tabelle hash integrate di Go.

OperazioneSintassi
Creare una map con makem := make(map[string]int)
Letterale mapm := map[string]int{"a": 1, "b": 2}
Impostare un valorem["c"] = 3
Leggere un valorev := m["a"]
Verificare se esistev, ok := m["x"]
Eliminare una chiavedelete(m, "a")
Lunghezzalen(m)
Iterarefor k, v := range m { ... }

Struct e metodi

Le struct raggruppano campi; i metodi aggiungono comportamento tramite un receiver.

OperazioneSintassi
Definire una structtype Point struct { X, Y int }
Creare un'istanzap := Point{X: 1, Y: 2}
Accedere a un campop.X
Puntatore a una structp := &Point{1, 2}
Metodo con receiver per valorefunc (p Point) Dist() float64 { ... }
Metodo con receiver puntatorefunc (p *Point) Move(dx int) { p.X += dx }
Struct incorporatatype Circle struct { Point; R int }
Tag delle structName string con un tag json:"name" tra backtick

Interfacce

Le interfacce si soddisfano implicitamente: qualsiasi tipo con i metodi giusti va bene.

OperazioneSintassi
Definire un'interfacciatype Shape interface { Area() float64 }
Implementare (implicito)func (c Circle) Area() float64 { ... }
Interfaccia vuota (any)var x interface{} oppure var x any
Asserzione di tipos, ok := x.(string)
Type switchswitch v := x.(type) { case int: ... }
Interfaccia Stringerfunc (p Point) String() string { ... }

Goroutine e channel

Le goroutine sono thread leggeri; i channel si passano valori tra loro.

OperazioneSintassi
Avviare una goroutinego doWork()
Creare un channelch := make(chan int)
Channel con bufferch := make(chan int, 5)
Inviare su un channelch <- 42
Ricevere da un channelv := <-ch
Chiudere un channelclose(ch)
Range su un channelfor v := range ch { ... }
Select sui channelselect { case v := <-ch: ...; default: ... }
Wait groupvar wg sync.WaitGroup; wg.Add(1); wg.Wait()
Mutexvar mu sync.Mutex; mu.Lock(); mu.Unlock()

Gestione degli errori

Go restituisce gli errori come valori: non esistono eccezioni.

OperazioneSintassi
Restituire un errorefunc read() (string, error) { return "", err }
Controllare un erroreif err != nil { return err }
Creare un erroreerrors.New("not found")
Errore formattatofmt.Errorf("bad id %d", id)
Incapsulare un errorefmt.Errorf("load: %w", err)
Estrarre / confrontareerrors.Is(err, os.ErrNotExist)
Confrontare per tipoerrors.As(err, &target)
Panic / recoverdefer func() { recover() }()

La sintassi di Go che usi di più, in una sola pagina. Questa cheat sheet di Go è un riferimento rapido per il linguaggio di base: variabili e tipi, slice e map, struct e interfacce, più le goroutine e i channel che rendono Golang così forte nella concorrenza.

Tutto quello che trovi qui è Go standard e si compila con la toolchain ufficiale. Copia quello che ti serve oppure prova ogni frammento dal vivo nel playground Go, senza installare nulla. Stai imparando Go? Il corso interattivo gratuito di Go di Coddy copre slice, struct, interfacce e goroutine passo dopo passo.

Domande frequenti sulla cheat sheet di Go

Questa cheat sheet di Go è gratuita?
Sì. Questa cheat sheet di Go è completamente gratuita e non richiede registrazione. Salvala nei preferiti e torna quando devi controllare un'operazione sulle slice, uno schema con i channel o un metodo di una struct.
Qual è la differenza tra := e var in Go?
var x = 0 dichiara una variabile e funziona ovunque, anche a livello di package. x := 0 è la dichiarazione breve di variabile: dichiara e assegna insieme, deduce il tipo e si può usare solo dentro una funzione. Usa var quando ti serve un tipo esplicito o una variabile a livello di package, e := per dichiarazioni locali concise.
Cosa sono le goroutine e i channel?
Una goroutine è un thread leggero gestito dal runtime di Go: ne avvii una scrivendo go someFunc(). I channel sono tubi tipizzati che permettono alle goroutine di comunicare in sicurezza: una goroutine invia con ch <- v e un'altra riceve con <-ch. Insieme formano il modello di concorrenza di Go, riassunto dal motto "condividi la memoria comunicando".
Posso esercitarmi con Go online?
Sì. Apri il playground Go per eseguire nel browser qualsiasi frammento di questa cheat sheet, senza installare la toolchain di Go. Quando vuoi un percorso strutturato, il corso interattivo gratuito di Go di Coddy ti porta passo dopo passo da variabili e slice fino a goroutine e channel.
Questa cheat sheet va bene per chi inizia?
Sì. È organizzata dagli argomenti più comuni (variabili, controllo del flusso, funzioni) fino a quelli avanzati (goroutine, channel, gestione degli errori), così puoi usare le prime sezioni fin dal primo giorno e arrivare al resto con il tempo.
Illustrazione dei linguaggi di programmazione di Coddy

Impara Go con Coddy

INIZIA