이미 좋은 답변이 있습니다. 직관적으로 이해하려는 다른 사람들을 위해 내 자신을 추가하겠습니다.
상호 작용
하나의 메소드가있는 인터페이스는 다음과 같습니다.
type Runner interface {
Run()
}
따라서 Run()
메소드 가있는 모든 유형 은 Runner 인터페이스를 충족시킵니다.
type Program struct {
/* fields */
}
func (p Program) Run() {
/* running */
}
func (p Program) Stop() {
/* stopping */
}
빈 인터페이스
메소드가없는 명명 된 빈 인터페이스는 다음과 같습니다.
type Empty interface {
/* it has no methods */
}
따라서 모든 유형이이 인터페이스를 충족합니다. 이 인터페이스를 만족시키기위한 방법이 필요하지 않기 때문입니다. 예를 들면 다음과 같습니다.
// Because, Empty interface has no methods, following types satisfy the Empty interface
var a Empty
a = 5
a = 6.5
a = "hello"
그러나 위의 프로그램 유형이이를 만족합니까? 예:
a = Program{} // ok
interface {}는 위의 빈 인터페이스와 같습니다.
var b interface{}
// true: a == b
b = a
b = 9
b = "bye"
보시다시피, 신비한 것은 없지만 남용하기는 매우 쉽습니다. 최대한 멀리 떨어져 있으십시오.
https://play.golang.org/p/A-vwTddWJ7G
interface{}
void *
C 와 동등하다