Por que a assinatura do método precisa corresponder perfeitamente ao método da interface
Comecei a aprender o Go e não consigo entender o seguinte:
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)
}
Isso falha com:
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 {})
Não entendo por que o Go não aceita ofoo(int)
assinatura dado o fato de queint
implementainterface {}
. Alguém pode ajudar com uma explicação?