Multiple Return Values
Returning Two Values
A function's signature can list several return types in parentheses, and the return statement supplies a matching value for each one, comma-separated.
Example: Returning Two Values
package main
import "fmt"
func divide(a, b int) (int, int) {
return a / b, a % b
}
func main() {
quotient, remainder := divide(17, 5)
fmt.Println("quotient:", quotient, "remainder:", remainder)
}
Login to try C/C++/Java/PHP code in the editor
The Value, error Pattern
The most idiomatic use of multiple return values in Go is pairing a result with an error: the function returns nil for the error on success, or a non-nil error (and often a zero-value result) on failure.
Note: Always check the error before trusting the accompanying value.
Example: The Value, error Pattern
package main
import (
"errors"
"fmt"
)
func safeDivide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
func main() {
result, err := safeDivide(10, 0)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println("result:", result)
}
Login to try C/C++/Java/PHP code in the editor
Discarding Unwanted Return Values
When a function returns multiple values but you only need some of them, the blank identifier _ lets you discard the rest without declaring unused variables.
Example: Discarding Unwanted Return Values
package main
import "fmt"
func minMax(nums []int) (int, int) {
min, max := nums[0], nums[0]
for _, n := range nums {
if n < min {
min = n
}
if n > max {
max = n
}
}
return min, max
}
func main() {
_, max := minMax([]int{4, 9, 1, 7})
fmt.Println("max:", max)
}
Login to try C/C++/Java/PHP code in the editor
- Ignoring the error return value from a function call, assuming the first value is always safe to use.
- Trying to assign only some of the returned values without using _ for the ones you're skipping.
- Forgetting that all returned values must be captured (or discarded with _) -- you can't just grab the first one positionally.
- Go functions can return multiple values, separated by commas after return.
- The most common pattern is returning a result plus an error.
- Every returned value must be assigned to a variable or explicitly discarded with _.
- Multiple return values remove the need for output parameters or wrapper objects seen in other languages.
Chapter Quiz — Complete all 7 topics to unlock
0/7 topics done
Complete these topics first: