Skip to content

Latest commit

 

History

History
 
 

funcoes

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Funções

Descreve o funcionamento de funções em Golang

  • No Go não há metodos, só funções
  • Retorno multiplo - Facilita a escrita e torna o código mais limpo
  • Retorno assinado - Facilita a leitura do código
  • Os parametros por padrão são passados por valor
  • Utilizando ponteiros é possível passar valores por referencia
package main

import (
	"fmt"
)

// Retorno simples
func soma(x int, y int) int {
	return x + y
}

// Retorno duplo
func troca(x string, y string) (string, string) {
	return y, x
}

//Retorno assinado
func divide(x, y int) (resultado, resto int) { // os dois retornos são inteiros nesse exemplo
	resto = x % y
	resultado = x / y
	return
}

// função que recebe uma função como parâmetro
func executaFuncao(f func(string) string, valor string) {
	aux := f(valor)
	fmt.Printf(aux)
}

func printValorByRef(valor *string) {
	fmt.Printf("Valor por referencia = %v\r\n", *valor)
}

//funcao variadica - recebe como argumentos infinitos parâmetros do tipo inteiro
func variadicaInteiros(v ...int) {
	fmt.Println(v)
}

//funcao variadica - recebe como argumentos infinitos parâmetros do tipo interface
func variadicaInterface(v ...interface{}) {
	fmt.Println(v)
}

func main() {
	fmt.Printf("Funções!\r\n")

	fmt.Printf("Soma 1+1 = %v\r\n", soma(1, 1))

	b, a := troca("A", "B")
	fmt.Printf("troca A, B = %v, %v\r\n", b, a)

	resu, rest := divide(5, 2)
	fmt.Printf("A divisão de 5 por 2 é = %v\r\n", resu)
	fmt.Printf("O resto da divisão de 5 por 2 é = %v\r\n", rest)

	// função anonima que vamos passar para printFunc
	ola := func(v string) string {
		return "Olá " + v + "!\r\n"
	}

	executaFuncao(ola, "Cesar")

	valor := "Esse valor não vai ser copiado, só estamos passando o ponteiro"
	printValorByRef(&valor)

	//retorno da função variadica, podendo passar infinitos parâmentros do tipo inteiro
	variadicaInteiros(1, 2, 3, 4, 5)

	//retorno da função variadica, podendo passar infinitos parâmentros do tipo interface
	variadicaInterface(1, "dois", 3, "quatro", 5, true, false)

}

}

Playground