توابع و متدهای Go میتوانند چندین مقدار بازگردانند:
func GetCard() (Card, error) { ... }
هر مقدار بازگشتی باید به ترتیب انتساب داده شود و با کاما از هم جدا شوند:
card, err := GetCard()
هر جایگاه در این انتساب یک متغیر تعریف میکند.
در Go تعریف یک متغیر بدون استفاده از آن مجاز نیست.
برای رد کردن آن مقدار بازگشتی، به جای اسم متغیر از شناسهی خالی _ استفاده کنید.
card, _ := GetCard() // error intentionally ignored
_, err := GetCard() // card ignored, only checking for error
error یک «رابط» توکار است.
خطای nil یعنی هیچ خطایی رخ نداده است؛ هر مقدار غیر از nil یعنی چیزی اشتباه پیش رفته است.
طبق قرارداد، توابعی که ممکن است شکست بخورند باید error را به عنوان آخرین مقدار خود بازگردانند.
فراخوانیکننده باید پیش از استفاده از دیگر مقادیر بازگشتی آن را بررسی کند:
card, err := GetCard()
if err != nil {
// unsafe to use card here
return err
}
// safe to use card here
ok
الگوی انتساب دومقداری در بیرون از مدیریت خطا هم ظاهر میشود.
جستوجو در نقشه، تأیید نوع و دریافت از کانال همگی از یک مقدار منطقی دوم استفاده میکنند که طبق قرارداد ok نامیده میشود تا موفقیت یا وجود داده را نشان دهد:
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
مقادیر بازگشتی را هم میتوان در امضای تابع نام داد. این متغیرها سپس درون بدنهی تابع قابل دسترسی هستند.
func divide(a, b int) (quotient, remainder int) {
quotient = a / b
remainder = a % b
return quotient, remainder
}
مقادیر بازگشتی نامگذاریشده معنای هر جایگاه بازگشت را مستند میکنند. میتوان از آنها همراه با یک «بازگشت برهنه»، یعنی بازگشتی که بدون مقدار نوشته میشود، هم استفاده کرد. بازگشتهای برهنه بهطور ضمنی مقادیر کنونی متغیرهای نامگذاریشده را بازمیگردانند:
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
در توابع بلندتر، بازگشتهای برهنه اغلب خوانایی را کاهش میدهند، چون مشخص نیست چه چیزی بازگردانده میشود. مگر اینکه تابع آنقدر کوتاه باشد که امضا همیشه در دید باشد، مقادیر بازگشتی صریح را ترجیح دهید.
برای یادگیری بیشتر، Go by Example: Multiple Return Values، Effective Go: Multiple Returns یا Tour of Go را ببینید.