Go by Example: Multiple Return Values

Go has built-in support for multiple return values. This feature is used often in idiomatic Go, for example to return both result and error values from a function.

package main
import "fmt"

The (int, int) in this function signature shows that the function returns 2 ints.

func vals() (int, int) {
    return 3, 7
}

Go’s return values may be named. If so, they are treated as variables defined at the top of the function. A `return“ statement without arguments returns the named return values. This is known as a “naked” return.

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

Here we use the 2 different return values from the call with multiple assignment.

    a, b := vals()
    fmt.Println(a)
    fmt.Println(b)

If you only want a subset of the returned values, use the blank identifier _.

    _, c := vals()
    fmt.Println(c)

The split function will return the values of x & y

    d, e := split(17)
    fmt.Println(d, e)
}
$ go run multiple-return-values.go
3
7
7
7 10

Naked return statements should be used only in short functions. They can harm readability in longer functions.

Accepting a variable number of arguments is another nice feature of Go functions; we’ll look at this next.

Next example: Variadic Functions.