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()
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
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 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
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.