Da trilha de Go Este conceito ainda não saiu como card do dia. ir para o card de hoje

Go Funções Básico

Funções e múltiplos retornos

Em Go, funções são blocos de código reutilizáveis que podem receber parâmetros e retornar valores. Diferente de muitas linguagens, Go permite que uma função retorne múltiplos valores, o que é muito útil para retornar um resultado e um erro, por exemplo.

Além disso, Go suporta retornos nomeados, onde os valores de retorno podem ser declarados com nomes e usados como variáveis dentro da função. Isso pode tornar o código mais claro e permitir um return sem argumentos.

Outro recurso poderoso são as funções variádicas, que aceitam um número variável de argumentos do mesmo tipo. Por fim, funções são valores de primeira classe em Go: podem ser atribuídas a variáveis, passadas como argumentos e retornadas por outras funções.

Pontos-chave

  • Funções podem retornar múltiplos valores, separados por vírgula na assinatura e no return.
  • Retornos nomeados são declarados na assinatura e podem ser usados como variáveis locais.
  • Funções variádicas recebem ...T e os argumentos chegam como um slice []T.
  • Funções são valores: podem ser atribuídas a variáveis e passadas como parâmetros.
  • O return sem argumentos só é permitido em funções com retornos nomeados.
funcoes_multiplos_retornos.go
package main

import (
	"fmt"
	"strings"
)

// Função com múltiplos retornos: divide e retorna quociente e resto.
func dividir(a, b int) (int, int) {
	return a / b, a % b
}

// Retornos nomeados: já declara as variáveis de retorno.
func dividirNomeado(a, b int) (quociente, resto int) {
	quociente = a / b
	resto = a % b
	return // retorno sem argumentos
}

// Função variádica: recebe zero ou mais strings.
func juntar(separador string, partes ...string) string {
	return strings.Join(partes, separador)
}

// Função que recebe outra função como parâmetro.
func aplicar(f func(int) int, valor int) int {
	return f(valor)
}

func main() {
	q, r := dividir(10, 3)
	fmt.Println("dividir:", q, r)

	q2, r2 := dividirNomeado(10, 3)
	fmt.Println("dividirNomeado:", q2, r2)

	s := juntar("-", "a", "b", "c")
	fmt.Println("juntar:", s)

	dobro := func(x int) int { return x * 2 }
	fmt.Println("aplicar dobro:", aplicar(dobro, 5))
}

Exercícios

  1. 1
    Fácil

    Múltiplos retornos: minMax

    Escreva uma função minMax que recebe um slice de inteiros e retorna o menor e o maior valor. Considere que o slice nunca está vazio. No main, chame a função com []int{3, 1, 4, 2} e imprima os valores no formato min=1 max=4.

    Resolver
  2. 2
    Médio

    Retornos nomeados: estatísticas

    Crie uma função estatisticas que recebe uma lista variádica de números float64 e retorna a soma, a média e a quantidade de elementos, usando retornos nomeados. Se a lista estiver vazia, retorne soma 0, média 0 e quantidade 0. No main, chame com 1, 2, 3, 4 e imprima soma=10.00 media=2.50 n=4.

    Resolver
  3. 3
    Desafio

    Funções como valores e variádicas: pipeline

    Implemente uma função pipeline que recebe um valor inteiro, uma função de transformação func(int) int e uma lista variádica de outras funções de transformação. Ela deve aplicar a primeira função e, em seguida, cada uma das funções variádicas na ordem, retornando o resultado final. No main, crie dobro e maisUm e chame pipeline(3, dobro, maisUm, dobro); imprima o resultado no formato resultado=14.

    Resolver

Continue estudando