3
我開始學會去和無法理解如下:爲什麼方法簽名必須完全匹配接口方法
package main
import "fmt"
type I interface {
foo(interface {})
}
type S struct {}
func (s S) foo(i int) {
fmt.Println(i)
}
func main() {
var i I = S{}
i.foo(2)
}
這種失敗:
cannot use S literal (type S) as type I in assignment:
S does not implement I (wrong type for foo method)
have foo(int)
want foo(interface {})
我不明白爲什麼圍棋不接受foo(int)
簽名,因爲int
實施了interface {}
。任何人都可以幫忙解釋一下嗎?
如果程序的最後一行是由'i.foo(「你好」)'代替,會發生什麼?它不會是一個類型錯誤,因爲'i.foo'接受任何類型的參數。 –
@PaulHankin,這是真的,但你想說什麼呢? – kaspersky
通過它,我的意思是,如果's'滿足接口'I',那麼你就會有一個很好的類型化程序,它用一個字符串參數調用'S.foo',即使它需要一個int參數。所以去的類型系統將不健全。 –