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 に答える