我试图理解 Golang (1.12) 接口。我发现接口指针必须显式取消引用,与结构不同:
import "fmt"
// A simple interface with one function
type myinter interface {
hello()
}
// Implement myinter
type mystruct struct {}
func (mystruct) hello() {
fmt.Println("I am T!")
}
// Some function that calls the hello function as defined by myinter
func callHello(i *myinter) {
i.hello() // <- cannot resolve reference 'hello'
}
func main() {
newMystruct := &mystruct{}
callHello(newMystruct)
}
在这里,我的函数无法解析接口中定义的callHello对我的函数的引用。hello当然,取消引用接口是可行的:
func callHello(i *myinter) {
(*i).hello() // <- works!
}
但在结构体中,我们可以直接调用函数,不需要这种繁琐的解引用符号:
func callHello(s *mystruct) {
s.hello() // <- also works!
}
为什么会这样呢?我们必须显式取消引用指针是否有原因interface?Go 是否试图阻止我将interface指针传递给函数?
慕尼黑5688855
www说
料青山看我应如是
相关分类