return în Go

Încheie funcția curentă și trimite apelantului valorile rezultat (zero, una sau mai multe).

Sintaxă
return
return valoare
return v1, v2

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 return la final când ultimul if nu 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.