AnyCompiler

Functions

Uma function do Go pode retornar mais de um valor diretamente — sem precisar envolvê-los em uma tupla ou objeto primeiro. Isso é usado constantemente em toda a standard library do Go, mais notavelmente para retornar um resultado junto com um error.

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, remainder)
}
Output
3 2

Múltiplos valores de retorno na prática

Como múltiplos valores de retorno fazem parte da própria linguagem, uma function como minMax abaixo pode retornar tanto o menor quanto o maior número de um slice em uma única chamada, e quem chama apenas desempacota os dois com :=.

package main

import "fmt"

func minMax(numbers []int) (int, int) {
	min, max := numbers[0], numbers[0]
	for _, n := range numbers {
		if n < min {
			min = n
		}
		if n > max {
			max = n
		}
	}
	return min, max
}

func main() {
	low, high := minMax([]int{4, 8, 15, 16, 23, 42})
	fmt.Println(low, high)
}
Output
4 42

A seguir: controle de fluxo — if/else, e a única palavra-chave de loop do Go.

Practice exercise

Escreva uma function multiply(a, b int) int que retorne a * b, depois imprima multiply(6, 7).