Para a declaração de uma interface Go, utilizamos a palavra reservada interface como 
                mostrado abaixo:
            
            Sintaxe
            type nome_interface interface {
    nome_metodo1(<lista_parametros>) (<tipos_retorno>)
    (...)
    nome_metodoN(<lista_parametros>) (<tipos_retorno>)
}
            Onde
            nome_metodo1…N: nome do métodos abstratos 
<lista_parametros>: lista de parâmetros separados por (,)
<tipos_retorno>: lista de tipos de retorno separados por (,)
            
                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, aplicacamos 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.