0

我以为我了解 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。请解释!

4

2 回答 2

2

您将 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() {
}
于 2012-11-23T19:13:02.543 回答
1

关于接收器的要点是您必须使用receiver.function()

如果您想Wtf在没有接收者的情况下被调用,请将其声明更改为

func Wtf() { 

如果你想调用它而不改变它,你可以写

 Writeable{}.Wtf()
于 2012-11-23T19:08:22.940 回答