2016-06-25 6 views
1

Ich benutze VS Code Go-Erweiterung.Go, Warum sollte nicht "this" für Methode Empfängername

Hier ist mein Code

func (this *MyClass) Xxx() error {} 

Und es ist Erwähnen Sie mich diese

exportierte Methode MyClass.Xxx sollte Kommentar oder unexported

Empfängername sollte ein Spiegelbild seiner Identität sein; Verwenden Sie keine generischen Namen wie "me", "this" oder "self";

+0

Hallo diese Frage beantwortet wurde: http://programmers.stackexchange.com/questions/286406/use-of-this-in-golang http://stackoverflow.com/questions/29028512/go-this- keywordh –

+0

In kurzen Worten: Das 'This' bedeutet' Vererbung'. Vererbung bedeutet "abstrakte" und "virtuelle" Methoden. Das heißt, mit der 'Vererbung' können Sie 'this.callAbstractMethod()' schreiben. Go-Sprache unterstützt keine Vererbung. Dies bedeutet, dass "Empfänger" kein "Dies" ist, weil "Dies" immer etwas bedeutet, das nicht ein "Dies" ist, sondern ein "Anderes" (zB "Super"). In der Go-Sprache gibt es keine "Super" -Instanzen unter der "This" -Instanz, da in der Go-Sprache keine Vererbung als solche existiert. – mezoni

Antwort

3

Als mentioned here

v.Method() ist eigentlich syntaktischer Zucker und Go versteht auch die de-gezuckerte Version davon: (T).Method(v). You can see an example here.

package main 

type T struct{} 

func (t T) Method() {} 

func main() { 
    t := T{} 
    t.Method() // this is valid 
    (T).Method(t) // this too 
} 

den Empfänger wie jeder andere Parameter Benennung spiegelt wider, dass es in der Tat nur ein weiterer Parameter recht gut ist.

Wie Ixrec setzt es in this answer:

In anderen Sprachen die this/self/whatever Variable hat in der Regel einige speziellen Eigenschaften, wie durch die Sprache auf magische Weise zur Verfügung gestellt werden, oder mit speziellem Zugang zu privaten Methoden (Vergiss nicht, Go hat keine privaten Felder/Methoden).
Obwohl der "Empfänger" bis zu einem gewissen Grad immer noch "magisch bereitgestellt" ist, ähnelt er einem regulären Funktionsargument, das wohl nicht zählt.

+0

Siehe auch https://github.com/golang/go/wiki/CodeReviewComments#receiver-names – VonC