Para a declaração de uma interface Go, utilizamos a palavra reservada interface como mostrado abaixo:
Sintaxe
type nome_interface interface {
nome_metodo1(param1 tipo_param, paramN tipo_param) (tipo_retorno1, tipo_retornoN)
nome_metodo2(param1 tipo_param, paramN tipo_param) (tipo_retorno2, tipo_retornoN)
nome_metodoN(param1 tipo_param, paramN tipo_param) (tipo_retornoN, tipo_retornoN)
}
Onde
metodo1…N: nome do métodos que desejamos criar.
param1…N: lista de parâmetros
tipo_retorno: um ou mais tipos de retorno do método
tipo_param: tipo de dado do parâmetro
Como a interface é um tipo de dado, podemos criar uma variável do tipo interface e atribuir a
essa variável outras tipos de dados que possuem métodos criados, respeitando as definições de uma interface.
Com o uso de interface em Go, utilizamos o conceito de abstração.
Exemplo 1
package main
import "fmt"
//declaração dos tipos
type meu_tipo uint8
type meu_tipo2 uint8
//declaração da interface
type minha_interface interface {
MostrarBinario()
}
//implementação da interface e associação de método aos tipos
func (val meu_tipo) MostrarBinario(){
fmt.Printf("MostrarBinario meu_tipo :%08b\n", val)
}
func (val meu_tipo2) MostrarBinario(){
fmt.Printf("MostrarBinario meu_tipo2:%08b\n", val)
}
func main() {
var var_inter minha_interface //nil
var_inter = meu_tipo(100)
var_inter.MostrarBinario()
var_inter = meu_tipo2(200)
var_inter.MostrarBinario()
}
Saída
str1 declared and not used
str2 declared and not used
Ao declarar uma variável do tipo interface sem atribuição inicial, seu valor padrão
ou inicial é nil.
Quando associamos um método a um tipo de dado por meio de interface, todos os métodos definidos
na interface devem ser obrigatóriamente implementados.