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