Was steht in den Klammern in Go-Funktionsdeklarationen?
In Go stoßen Sie möglicherweise auf Funktionsdeklarationen mit einer Syntax wie dieser:
func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { ... }
func (s *GracefulServer) BlockingClose() bool { ... }
Was in den Klammern steht, wie zum Beispiel (h handler) und (s *GracefulServer) wird als „Empfänger“ bezeichnet. Die Funktionsweise in Go unterscheidet sich von anderen Sprachen.
Der Empfänger als Klasse
Der Empfängertyp repräsentiert wie eine Klasse in der objektorientierten Programmierung die Entität welche Methoden aufgerufen werden. Wenn A beispielsweise eine Methode innerhalb der Klasse Person ist, ist eine Instanz von Person erforderlich, um A aufzurufen.
Empfänger als Wert oder Zeiger
In den obigen Beispielen h ist ein Werttyp, während s ein Zeiger ist. Diese Unterscheidung wirkt sich auf die Funktionsweise der Methode aus:
Wann Zeiger verwendet werden sollten
Verwenden Sie Zeiger als Empfänger, wenn Sie den Zustand des Empfängers ändern möchten. Wenn Sie beispielsweise BlockingClose benötigen, um den Status von GracefulServer zu ändern, ist s *GracefulServer erforderlich.
Spezifikationsreferenz:
Weitere Einzelheiten finden Sie im offiziellen Go Spezifikation: https://golang.org/ref/spec#Method_sets
Das obige ist der detaillierte Inhalt vonWas macht der Empfänger in Go-Funktionsdeklarationen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!