Skip to content

Latest commit

 

History

History
112 lines (78 loc) · 1.69 KB

File metadata and controls

112 lines (78 loc) · 1.69 KB

Golang: Você precisa saber isso sobre funções

Tipos de funções

  • Função sem retorno

    func soma(a int, b int) {
      fmt.Printf("Resultado: %v", a + b)
    }
  • Função com retorno normal

    func soma(a int, b int) int {
      return a + b, "somou!"
    }
  • Função com retorno múltiplo

    func soma(a int, b int) (int, string) {
      return a + b, "somou!"
    }
  • Função com retorno nomeado

    func soma(a int, b int) (result int) {
      result = a + b
      return
    }
  • Função variadic

    func main() {
      result := somaTudo(1,2, 3, 4, 5, 6, 7, 8, 9, 10)
    
      fmt.Println(result)
    }
    
    func somaTudo(x ...int) int {
      resultado := 0
    
      for _, value := range x {
        resultado += value
      }
    
      return resultado
    }
  • Funções anônimas

    resultado := func(x ...int) func() int {
      	result := 0
      	
      	for _, value := range x {
      		result += value
      	}
      	
      	return func() int {
      		return result * result
      	}
      }

    OBS: a função anônima retorna um função (func() int)

    • Imprimir a referência na memória da função anônima

      fmt.Println(resultado(10, 10, 10)) // 0x497860
    • Imprimir a o resultado da função anônima

      fmt.Println(resultado(10, 10, 10)()) // 900

      Sintaxe: variavel(parametros, ...)()

Métodos

Métodos são funções que estão relacionadas a uma struct (binding)

  • Exemplo

    type Carro struct {
        Nome string
    }
    
    func (c Carro) andar() {
      fmt.Printf("O carro %v andou!", c.Nome)
    }
    
    func main() {
    
      carro := Carro{Nome: "BMW"}
    
      carro.andar()
      
    }