Als Anfänger im Bereich der Go-Programmierung werden Sie möglicherweise auf Fälle stoßen, in denen Klammern direkt nach dem Schlüsselwort func verwendet werden . Dies kann verwirrend sein, insbesondere wenn Sie mit der einzigartigen Syntax von Go nicht vertraut sind. Lassen Sie uns Licht ins Dunkel dieser scheinbar rätselhaften Funktion bringen.
In Go sind die Klammern nach func nicht Teil der Funktionssignatur, sondern geben eine Methode an. Eine Methode ist eine Funktion, die einem bestimmten Typ zugeordnet ist. Der von Ihnen bereitgestellte Codeausschnitt veranschaulicht die Definition einer Methode namens MarshalJSON für den Typ Version.
Aufschlüsselung:
Der Empfänger ist analog zum Schlüsselwort „self“ oder „this“ in Python bzw. Java. Es stellt die Instanz des Typs dar, für den die Methode aufgerufen wird. In Ihrem Beispiel bezieht sich v auf die Instanz des Typs Version, auf die die MarshalJSON-Methode aufgerufen wird.
Um dieses Konzept weiter zu veranschaulichen, betrachten Sie den folgenden Code:
type Person struct { name string } func (p Person) SayHello() { fmt.Printf("Hello! My name is %s.\n", p.name) }
In diesem Beispiel ist die SayHello-Methode an den Strukturtyp Person angehängt. Dies bedeutet, dass jede Instanz des Person-Typs die SayHello-Methode aufrufen kann.
Die Klammern nach func in Go geben eine Methodendefinition an, wobei die nachfolgenden Klammern den Empfänger und den Typ des Empfängers angeben . Mit Methoden können Sie Funktionen zu bestimmten Typen hinzufügen und so die Modularität und Wiederverwendbarkeit des Codes verbessern.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3