O que é uma interface? Uma interface é uma abstração, uma coleção de métodos não implementados, que podem nos ajudar a ocultar a implementação específica e obter o desacoplamento.
Este artigo falará sobre o conteúdo relacionado à interface Go.
interface implícita
Definir uma interface na linguagem Go requer o uso da palavra-chave interface e só pode definir métodos, não variáveis de membro, por exemplo:
type error interface {
Error() string
}
复制代码
Podemos implementar a interface indiretamente implementando o Error() string
método error
sem implementar explicitamente a interface:
type RPCError struct {
Code int64
Message string
}
func (e *RPCError) Error() string {
return fmt.Sprintf("%s, code=%d", e.Message, e.Code)
}
复制代码
estruturas e ponteiros
Podemos usar structs ou ponteiros como receptores de implementações de interface, mas esses dois tipos não são os mesmos e ambas as implementações não podem existir ao mesmo tempo.
type Cat struct {}
type Duck interface { ... }
func (c Cat) Quack {} // 使用结构体实现接口
func (c *Cat) Quack {} // 使用结构体指针实现接口
var d Duck = Cat{} // 使用结构体初始化变量
var d Duck = &Cat{} // 使用结构体指针初始化变量
复制代码
Aqui, ocorre a interface implementada pelo ponteiro de estrutura. Quando a estrutura é usada para inicializar a variável, a compilação não pode passar.
tipo de ponteiro
Existem dois tipos diferentes de interfaces no Go
runtime.iface
Representa uma interface com um conjunto de métodosruntime.eface
Representa uma interface de interface{} que não contém métodos
Observe que
interface{}
os tipos não representam tipos arbitrários.