In Go ist eine Methode eine Funktion mit einem speziellen Empfängerargument. Der Empfänger erscheint in seiner eigenen Argumentliste zwischen dem func
-Schlüsselwort und dem Methodennamen. Methoden sind mit einem Typ verbunden und können verwendet werden, um Operationen für Werte dieses Typs durchzuführen. Dieses Konzept ähnelt der objektorientierten Programmierung, bei der Methoden im Wesentlichen Funktionen sind, die zu einer Klasse oder einem Objekt gehören. GO hat jedoch keine Klassen, sodass Methoden direkt an Typen angehängt werden.
Mit Methoden können Sie Verhaltensweisen definieren, die an Instanzen eines Typs durchgeführt werden können. Beispielsweise können Sie eine Methode definieren, um ein Feld einer Struktur zu aktualisieren oder eine Berechnung auf der Grundlage der Felder der Struktur durchzuführen. Dies macht Ihren Code lesbarer und organisierter, da die verwandte Funktionalität zusammen mit den Daten gruppiert wird, die er betreibt.
Um eine Methode in Go zu definieren, verwenden Sie die folgende Syntax:
<code class="go">func (receiver ReceiverType) MethodName(parameters) returnType { // Method body }</code>
Hier ist eine Aufschlüsselung der Komponenten:
func
ist das Schlüsselwort, um eine Funktion oder Methode zu starten.(receiver ReceiverType)
Gibt den Empfänger an. ReceiverType
kann eine Struktur oder einen anderen Typ sein, und receiver
ist der Name, den Sie dem Empfängerparameter innerhalb der Methode geben.MethodName
ist der Name der Methode.parameters
sind die Parameter, die die Methode annimmt, ähnlich wie eine Funktion.returnType
ist der Typ des von der Methode zurückgegebenen Werts, falls vorhanden. Wenn Sie beispielsweise eine Person
haben und eine Methode definieren möchten, um das Alter der Person festzulegen, können Sie dies so tun:
<code class="go">type Person struct { Name string Age int } func (p *Person) SetAge(newAge int) { p.Age = newAge }</code>
In diesem Beispiel ist SetAge
eine Methode zum Person
und verändert das Age
der Person
.
Der Hauptunterschied zwischen einer Methode und einer Funktion in GO besteht darin, dass eine Methode ein Empfängerargument hat, während eine Funktion dies nicht tut. Mit diesem Empfängerargument kann die Methode einem bestimmten Typ zugeordnet werden, wodurch die Methode in Instanzen dieses Typs aufgerufen werden kann.
Hier sind die wichtigsten Unterschiede:
person.SetAge(30)
). Funktionen werden direkt aufgerufen (z. SetAge(person, 30)
).instance.Method()
) unterscheidet sich vom Aufrufen einer Funktion ( Function(instance)
).In Go können Methoden mit fast jedem Typ in Verbindung gebracht werden, aber es gibt einige Einschränkungen:
Grundtypen : Sie können Methoden zu Grundtypen wie int
, float64
, string
usw. definieren, müssen jedoch zuerst einen neuen Typ basierend auf diesen Grundtypen definieren. Zum Beispiel:
<code class="go">type MyInt int func (m MyInt) Double() int { return int(m * 2) }</code>
Strukturen : Methoden können direkt mit Strukturen verbunden werden, was der häufigste Anwendungsfall ist.
<code class="go">type Rectangle struct { width, height float64 } func (r Rectangle) Area() float64 { return r.width * r.height }</code>
Arrays und Scheiben : Sie können Methoden nicht direkt mit Arrays oder Scheiben assoziieren, aber Sie können einen Typ erstellen, der ein Array oder eine Scheibe einhüllt und dann Methoden mit diesem Typ assoziieren.
<code class="go">type IntSlice []int func (s IntSlice) Sum() int { sum := 0 for _, v := range s { sum = v } return sum }</code>
Zeiger : Sie können Methoden zu Zeigertypen definieren, die häufig für die Änderung des Zustands des Empfängers nützlich sind.
<code class="go">type Counter int func (c *Counter) Increment() { *c }</code>
Zusammenfassend können Sie Methoden mit einer Vielzahl von Typen in GO assoziieren, müssen Sie normalerweise einen neuen Typ definieren, wenn Sie Methoden mit grundlegenden Typen oder Arrays/Scheiben verwenden möchten.
Das obige ist der detaillierte Inhalt vonWas sind Methoden in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!