Vamos falar sobre a interface do Go | Mês do tema Go

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() stringmétodo errorsem 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.ifaceRepresenta uma interface com um conjunto de métodos
  • runtime.efaceRepresenta uma interface de interface{} que não contém métodos

Observe que interface{}os tipos não representam tipos arbitrários.

Acho que você gosta

Origin juejin.im/post/6945476531439271972
Recomendado
Clasificación