我以为我了解Go的类和方法接收器,但显然不了解。它们通常直观地工作,但是在下面的示例中,使用它似乎会导致“未定义:Wtf”错误:

package main

type Writeable struct {
    seq int
}

func (w Writeable) Wtf() { // causes a compile error
//func Wtf() { // if you use this instead, it works
}

func Write() {
    Wtf() // this is the line that the compiler complains about
}

func main() {
}

我正在使用上个月左右从golang和LiteIDE下载的编译器。请解释!

最佳答案

您正在将Wtf()定义为Writeable的方法。然后,您尝试在没有结构实例的情况下使用它。我在下面更改了您的代码以创建一个结构,然后将Wtf()用作该结构的方法。现在可以编译了。 http://play.golang.org/p/cDIDANewar

package main

type Writeable struct {
    seq int
}

func (w Writeable) Wtf() { // causes a compile error
//func Wtf() { // if you use this instead, it works
}

func Write() {
    w := Writeable{}
    w.Wtf() // this is the line that the compiler complains about
}

func main() {
}

10-06 14:20