← Back to Go Course | Chapter 4: Functions | Lesson 2 of 7

Multiple Return Values

Go functions can hand you back more than one answer at once, like a vending machine that gives you both your snack and your change.

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

markup
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)
}

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

markup
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)
}

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

markup
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)
}
Common Mistakes
  1. Ignoring the error return value from a function call, assuming the first value is always safe to use.
  2. Trying to assign only some of the returned values without using _ for the ones you're skipping.
  3. Forgetting that all returned values must be captured (or discarded with _) -- you can't just grab the first one positionally.
Chapter Summary
  • 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:

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.