Kurzusok
/
Go
Go
/
Tanterv
/
Több visszatérési érték

Több visszatérési érték ebben a kurzusban: Go

{one: "1 feladat", other: "%{count} feladat"}

A(z) Több visszatérési érték fogalomról

A Go függvényei és metódusai több értéket is visszaadhatnak:

func GetCard() (Card, error) { ... }

Minden visszatérési értéket sorrendben kell hozzárendelni, vesszővel elválasztva:

card, err := GetCard()

Az üres azonosító

A hozzárendelés minden pozíciója külön változót deklarál. A Go-ban nem lehet úgy deklarálni egy változót, hogy nem használod. Ha ki akarod hagyni az adott visszatérési értéket, a változónév helyett használd az üres azonosítót (_).

card, _ := GetCard() // error intentionally ignored
_, err := GetCard()  // card ignored, only checking for error

Hibakezelés

Az error egy beépített interfész. A nil értékű error azt jelenti, hogy nem volt hiba, bármely nem nil érték viszont hibára utal. A szokás az, hogy azok a függvények, amelyek meghiúsulhatnak, utolsó visszatérési értékként error-t adnak vissza. A hívónak ezt ellenőriznie kell, mielőtt bármely más visszatérési értéket felhasználna:

card, err := GetCard()
if err != nil {
    // unsafe to use card here
    return err
}
// safe to use card here

A comma-ok idióma

A két értéket használó hozzárendelési minta nem csak az error kezelésénél bukkan fel. A map-lekérdezések, a típus-állítások és a csatornafogadások mind egy második, ok néven jelölt logikai értéket használnak a siker vagy az adat meglétének jelzésére:

m := map[string]int{"a": 1}
v, ok := m["a"] // ok is true
v, ok = m["z"]  // ok is false
var i interface{} = "hello"
v, ok := i.(string) // ok is true
v, ok = i.(int)     // ok is false
v, ok := <-ch // ok is false if ch is closed and empty

Nevesített visszatérési értékek

A visszatérési értékeknek nevet is adhatsz a függvény szignatúrájában. Ezek a változók ezután a függvény törzsében is elérhetők.

func divide(a, b int) (quotient, remainder int) {
    quotient = a / b
    remainder = a % b
    return quotient, remainder
}

A nevesített visszatérési értékek dokumentálják, mit jelent az egyes visszatérési pozíció. Használhatók csupasz visszatéréssel is, ami azt jelenti, hogy nem írsz ki értékeket. A csupasz visszatérések implicit módon a nevesített változók aktuális értékeit adják vissza:

func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

Hosszabb függvényekben a csupasz visszatérés gyakran rontja az olvashatóságot, mert nem derül ki, mi is lesz a visszatérési érték. Inkább add meg kifejezetten a visszatérési értékeket, kivéve ha a függvény olyan rövid, hogy a szignatúrája mindig szem előtt van.

Ha többet szeretnél megtudni, nézd meg a Go by Example: Multiple Return Values, az Effective Go: Multiple Returns vagy a Tour of Go oldalt.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg