Ce face return
return oprește imediat funcția. Dacă funcția declară rezultate, după return scrii exact atâtea valori câte rezultate are, în ordine: return total, nil. Într-o funcție fără rezultate (cum este main), return simplu doar iese din ea.
Dacă rezultatele au nume, un return fără valori („naked return”) trimite valorile curente ale acelor variabile. Este practic în funcții scurte, dar în cele lungi face codul greu de urmărit.
Funcțiile amânate cu defer rulează după ce valorile din return au fost stabilite, chiar înainte ca funcția să se termine. Compilatorul cere un return pe orice drum prin funcție dacă ea are rezultate (eroarea missing return).
Exemple
Exemplul 1: Ieșire timpurie și mai multe valori
package main
import "fmt"
func cauta(nume []string, cautat string) (int, bool) {
for i, n := range nume {
if n == cautat {
return i, true // ieșim imediat
}
}
return -1, false
}
func main() {
elevi := []string{"Ana", "Mihai", "Ioana"}
if poz, ok := cauta(elevi, "Mihai"); ok {
fmt.Println("Mihai este pe poziția", poz)
}
_, ok := cauta(elevi, "Radu")
fmt.Println("Radu găsit:", ok)
}
Rezultat
Mihai este pe poziția 1
Radu găsit: false
Exemplul 2: return simplu cu rezultate numite și defer
Funcția amânată vede și poate modifica rezultatul numit după return.
package main
import "fmt"
func pret(baza float64) (total float64) {
defer func() {
total += 15 // taxa de livrare, adăugată după return
}()
total = baza * 1.21
return
}
func main() {
fmt.Printf("de plată: %.2f lei\n", pret(100))
}
Rezultat
de plată: 136.00 lei
Greșeli frecvente
- Număr greșit de valori:
return xîntr-o funcție cu două rezultate dănot enough return values. - Lipsa lui
returnla final când ultimulifnu acoperă toate cazurile:missing return. - Naked return în funcții lungi: nu se vede ce valori pleacă. Scrie valorile explicit.
Comenzi înrudite
func: Declară o funcție: parametri cu tip după nume, unul sau mai multe rezultate, metode și funcții anonime.defer: Amână un apel de funcție până la ieșirea din funcția curentă; folosit pentru închideri și curățenie.erori (error): În Go erorile sunt valori: funcțiile returnează un error, iar apelantul verifică if err != nil.