Conteúdo

Métodos

O que são?

De forma análoga a funções, em Go também temos os métodos, que por definição são os comportamentos atribuídos a uma determinada struct (o method receiver do método).

Na prática, na linguagem da marmota, métodos são funções que podem ser atribuídos a qualquer tipo. Sua sintaxe de declaração é muito semelhante à de funções, exceto pelo "binding" ao seu tipo, que aparece entre a palavra reservada func e o nome do método.

Sintaxe:

func (t tipo) nome(parâmetros) (retornos) {
    // O que é executado quando o método é chamado
    // Aqui dentro, o tipo está disponível através de t
}

Exemplo: validando CPF

package main

import (
	"fmt"
	"strconv"
)

// CPF simula o documento de identificação de pessoa física brasileira
type CPF string

func main() {
	cpf := CPF("11111111030")
	if cpf.EhValido() {
		fmt.Println("CPF válido")
	} else {
		fmt.Println("CPF inválido")
	}
}

// EhValido retorna se um CPF é valido ou não
func (c CPF) EhValido() bool {
	_, err := strconv.Atoi(string(c))
	if err == nil && len(c) == 11 {
		return true
	}
	return false
}

Observação: a validação de CPF tem mais regras, mas para título de exemplo estamos validando apenas se o número informado possui 11 algarismos.

Acima, verifica-se a sintaxe para declaração de métodos, onde:

  • func representa a palavra chave para iniciar a declaração do método, idêntica à de função;

  • (c CPF) representa o "bind" com o tipo, onde c é a instância do tipo, contendo uma cópia do seu valor quando o tipo for CPF, e uma cópia de seu endereço na memória quando for *CPF (sim, podemos colocar uma referência como binding)

  • EhValido é o nome do método, também obedece a máxima de quando iniciar com maiúscula é visível fora do package, e com minúscula apenas dentro

  • (), os parênteses, estão vazios, então não há parâmetros, mas caso houvess estariam entre os parênteses logo após o nome (como em funções)

  • bool representa o tipo do retorno

  • {}, as chaves, são utilizadas para definir o escopo do método, onde ela começa e termina

  • return, é a palavra chave que utilizamos para retornar as saídas

Tendo em mente que a sintaxe é a mesma de funções, podemos avançar para os exercícios.

Last updated