Go 为什么指定方法接收器有时会触发';未定义';错误?

Go 为什么指定方法接收器有时会触发';未定义';错误?,go,Go,我以为我理解Go的类和方法接收器,但显然不理解。它们通常直观地工作,但下面是一个示例,其中使用一个会导致“undefined: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() {

我以为我理解Go的类和方法接收器,但显然不理解。它们通常直观地工作,但下面是一个示例,其中使用一个会导致“undefined: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。请解释

关于接收器的要点是,必须使用
receiver.function()调用接收器上的函数。

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

func Wtf() { 
如果你想在不改变的情况下调用它,你可以写

 Writeable{}.Wtf()

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

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

func Wtf() { 
如果你想在不改变的情况下调用它,你可以写

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

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


感谢您的帮助和快速回复。感谢您的帮助和快速回复。回顾过去,这些事情总是那么明显,非常感谢。回顾过去,这些事情总是那么明显,非常感谢。