Vai al contenuto
eLearner.app
Modulo 3 · Lezione 1 di 511/50 nel corso~10 min
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

Go
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:

Go
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.

Go
func Sum(a, b int) int { ... }    // esportata
func helper() { ... }              // privata al package

Funzioni come valori

Le funzioni sono first-class values: puoi assegnarle, passarle e ritornarle. Approfondiremo nella lezione sulle closure.

Go
op := sum            // op ha tipo func(int, int) int
fmt.Println(op(2, 3)) // 5

main e init: due nomi speciali

  • func main() è il punto di ingresso del package main. 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

Esercizio#go.m3.l1.e1
Tentativi: 0Caricamento…

Definisci una funzione sum(a, b int) int che ritorna a+b, poi chiamala in main con (3, 4).

Caricamento editor…
Mostra suggerimento

Tipo condiviso: `(a, b int)`. Tipo di ritorno DOPO le parentesi.

Soluzione disponibile dopo 3 tentativi

Esercizio#go.m3.l1.e2
Tentativi: 0Caricamento…

Definisci greet(name string) (nessun valore di ritorno) che stampa 'ciao <name>'.

Caricamento editor…
Mostra suggerimento

Niente tipo di ritorno se la funzione non ritorna nulla.

Soluzione disponibile dopo 3 tentativi

Quiz#go.m3.l1.e3
Pronto

Dove va il tipo dei parametri in Go?

Go
func f(? ?) {}
Opzioni di risposta

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).
  • main e init sono nomi riservati con semantica speciale.