인터페이스란 무엇입니까? 인터페이스는 특정 구현을 숨기고 분리를 달성하는 데 도움이 될 수 있는 구현되지 않은 메서드의 모음인 추상화입니다.
이 문서에서는 Go 인터페이스 관련 콘텐츠에 대해 설명합니다.
암시적 인터페이스
Go 언어로 인터페이스를 정의하려면 interface 키워드를 사용해야 하며 멤버 변수가 아닌 메서드만 정의할 수 있습니다. 예를 들면 다음과 같습니다.
type error interface {
Error() string
}
复制代码
인터페이스 를 명시적으로 구현하지 않고 Error() string
메서드 를 구현하여 간접적으로 인터페이스를 구현할 수 있습니다.error
type RPCError struct {
Code int64
Message string
}
func (e *RPCError) Error() string {
return fmt.Sprintf("%s, code=%d", e.Message, e.Code)
}
复制代码
구조체와 포인터
구조체 또는 포인터를 인터페이스 구현의 수신기로 사용할 수 있지만 이 두 유형은 동일하지 않으며 두 구현이 동시에 존재할 수 없습니다.
type Cat struct {}
type Duck interface { ... }
func (c Cat) Quack {} // 使用结构体实现接口
func (c *Cat) Quack {} // 使用结构体指针实现接口
var d Duck = Cat{} // 使用结构体初始化变量
var d Duck = &Cat{} // 使用结构体指针初始化变量
复制代码
여기서 구조체 포인터에 의해 구현된 인터페이스가 발생하는데 구조체를 사용하여 변수를 초기화하면 컴파일을 통과할 수 없습니다.
포인터 유형
Go에는 두 가지 유형의 인터페이스가 있습니다.
runtime.iface
메서드 집합이 있는 인터페이스를 나타냅니다.runtime.eface
메서드가 포함되지 않은{} 인터페이스 인터페이스를 나타냅니다.
유형
interface{}
은 임의의 유형을 나타내지 않습니다.