Go는 동적 바인딩과 정적 바인딩을 모두 사용합니다. 필자가 이해할 때, 타입 어썰트를 사용해야한다면 동적 인 것입니다. 내 가정을 검증하고 싶습니다.Go 인터페이스 : 정적 대 동적 바인딩
type Xer interface {
X()
}
type XYer interface {
Xer
Y()
}
type Foo struct{}
func (Foo) X() { println("Foo#X()") }
func (Foo) Y() { println("Foo#Y()") }
가정 : type A
에서 변환 할 때
foo := Foo{}
// static: Foo -> XYer
var xy XYer = foo
// static: XYer -> Xer
var x Xer = xy
// static: Xer -> interface{}
var empty interface{} = x
// dynamic: interface{} -> XYer
xy2 := empty.(XYer)
// dynamic: XYer -> Foo
foo2 := xy2.(Foo)
그래서 - A
만족 B
경우>interface B
다음 주장을 필요로하지 않으며 itable이 컴파일시에 생성 할 수 있습니다. 필요하지 않은 어설 션을 사용하는 경우는 무엇입니까?
var x Xer = Foo{}
empty := x.(interface{})
이 경우 어떻게됩니까? 누군가가 나를 위해 이것을 분명히 할 수 있다면 그것은 위대 할 것이다.
출력하는 어셈블리를 보지 않는 이유는 무엇입니까? – cthom06
@ cthom06 왜냐하면 나는 너무 바보 야. –
[참고] (http://research.swtch.com/interfaces). – kostix