Passer au contenu principal
eLearner.app
Module 3 · Leçon 1 sur 511/50 dans le cours~10 min
Leçons du module (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

Exercice#go.m3.l1.e1
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Exercice#go.m3.l1.e2
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

Niente tipo di ritorno se la funzione non ritorna nulla.

Solution disponible après 3 tentatives

Quiz#go.m3.l1.e3
Prêt

Dove va il tipo dei parametri in Go?

Go
func f(? ?) {}
Options de réponse

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.