Lezioni del modulo (1/5)
Firma e parametri
In Go le funzioni si dichiarano con func. La sintassi della firma è
diversa da C/Java: il tipo va dopo il nome del parametro, separato da
uno spazio. È una scelta che si legge meglio a voce alta — "n di tipo int"
invece di "int n".
Sintassi base
func sum(a int, b int) int {
return a + b
}
func greet(name string) {
fmt.Println("ciao", name)
}Una funzione senza valore di ritorno semplicemente omette il tipo di ritorno.
Parametri consecutivi dello stesso tipo
Se più parametri consecutivi hanno lo stesso tipo, puoi dichiararlo una sola volta sull'ultimo. È idiomatico e si vede ovunque:
func sum(a, b int) int { return a + b }
func max3(a, b, c float64) float64 { /* ... */ }
func parse(s, sep string, limit int) []string { /* ... */ }Funzioni esportate vs non esportate
In Go la visibilità è determinata dal nome: identificatori che iniziano con lettera maiuscola sono esportati (visibili da altri package), gli altri sono privati al package.
func Sum(a, b int) int { ... } // esportata
func helper() { ... } // privata al packageFunzioni come valori
Le funzioni sono first-class values: puoi assegnarle, passarle e ritornarle. Approfondiremo nella lezione sulle closure.
op := sum // op ha tipo func(int, int) int
fmt.Println(op(2, 3)) // 5main e init: due nomi speciali
func main()è il punto di ingresso del packagemain. Niente argomenti, niente ritorni.func init()viene chiamato automaticamente all'avvio del package (anche più volte se più file lo definiscono). Utile per setup; usalo con parsimonia.
Prova tu
Definisci una funzione sum(a, b int) int che ritorna a+b, poi chiamala in main con (3, 4).
Mostra suggerimento
Tipo condiviso: `(a, b int)`. Tipo di ritorno DOPO le parentesi.
Soluzione disponibile dopo 3 tentativi
Definisci greet(name string) (nessun valore di ritorno) che stampa 'ciao <name>'.
Mostra suggerimento
Niente tipo di ritorno se la funzione non ritorna nulla.
Soluzione disponibile dopo 3 tentativi
Dove va il tipo dei parametri in Go?
func f(? ?) {}Recap
func nome(param tipo, ...) tipoDiRitorno { ... }.- Tipo dopo il nome; parametri consecutivi stesso tipo → dichiaralo una sola volta.
- Iniziale maiuscola = esportata; minuscola = privata al package.
- Le funzioni sono first-class (assegnabili, passabili).
maineinitsono nomi riservati con semantica speciale.