English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Go unterstützt Methoden. Go-Methoden sind ähnlich wie Go-Funktionen, aber mit einem Unterschied: Methoden enthalten einen Receiver-Parameter. Mit Hilfe dieses Receiver-Parameters kann die Methode auf die Eigenschaften des Receivers zugreifen. Hier kann der Receiver ein Strukturtyp oder ein nicht strukturierter Typ sein. Beim Erstellen von Methoden in der Code must der Receiver und der Receiver-Typ im selben Paket vorhanden sein. Und es ist nicht erlaubt, eine Methode zu erstellen, deren Receiver-Typ bereits in einem anderen Paket definiert ist, einschließlich der eingebauten Typen wie int, string und so weiter. Wenn Sie dies tun, wirft der Compiler einen Fehler aus.
Syntax:
func(reciver_name Type) method_name(parameter_list)(return_type){ // Code }
Hier kann der Receiver innerhalb der Methode aufgerufen werden.
In der Programmiersprache Go ist es erlaubt, Methoden mit Strukturtyp-Receiver zu definieren. Innerhalb der Methode kann dieser Receiver wie im folgenden Beispiel gezeigt werden aufgerufen werden:
package main import "fmt" //Author structure type author struct { name string branch string particles int salary int } //Methode des Empfängers func (a author) show() { fmt.Println("Author's Name: ", a.name) fmt.Println("Branch Name: ", a.branch) fmt.Println("Veröffentlichte Artikel: ", a.particles) fmt.Println(" Gehalt: ", a.salary) } func main() { //Initialization values //Author-Struktur res := author{ Name: "Sona", Abteilung: "CSE", Teilchen: 203, Gehalt: 34000, } //Methode aufrufen res.show() }
Output:
Autor's Name: Sona Abteilung Name: CSE Veröffentlichte Artikel: 203 Gehalt: 34000
In der Programmiersprache Go kann man Methoden mit nicht strukturartigen Typen als Receiver erstellen, solange der Typ und die Methodendefinition im selben Paket existieren. Falls sie in verschiedenen Paketen wie int, string usw. existieren, wirft der Compiler einen Fehler, da sie in verschiedenen Paketen definiert sind.
package main import "fmt" //Typedefinition type data int //Definieren Sie eine Methode //Receiver für nicht strukturartige Typen func (d1 data) multiply(d2 data) data { return d1 * d2 } /* //Wenn Sie versuchen, diesen Code auszuführen, //Dann wirft der Compiler einen Fehler func(d1 int)multiply(d2 int)int{ return d1 * d2 } */ func main() { value1 := data(23) value2 := data(20) res := value1.multiply(value2) fmt.Println("Endliches Ergebnis: ", res) }
Output:
Endliches Ergebnis: 460
In der Programmiersprache Go ist es Ihnen erlaubt,ZeigerErstellung von Methodenreceivern. Unter Verwendung von Zeigerreceivern, falls die im Methodenaufruf durchgeführten Änderungen im Aufrufer reflektiert werden sollen, was bei Wertreceivern unmöglich ist.
Syntax:
func (p *Type) method_name(...Type) Type { // Code }
package main import "fmt" // Author structure type author struct { name string branch string particles int } //Methode, die einen Receiver vom Typ author verwendet func (a *author) show(abranch string) { (*a).branch = abranch } // Hauptfunktion func main() { //Initialisierung des author-Strukturentyps res := author{ name: "Sona", branch: "CSE", } fmt.Println("Autor's name: ", res.name) fmt.Println("Branch Name (Before): ", res.branch) //Erstellung eines Zeigers p := &res //Aufruf der show-Methode p.show("ECE") fmt.Println("Autor's name: ", res.name) fmt.Println("Branch Name (After): ", res.branch) }
Output:
Author's name: Sona Branch Name (Before): CSE Author's name: Sona Branch Name (After): ECE
As everyone knows, in Go, when a function has a value parameter, it will only accept the value of the parameter. If you try to pass a pointer to a value function, it will not accept it, and vice versa. However, Go methods can accept both values and pointers, regardless of whether they are defined with a pointer or value receiver. As shown in the following example:
package main import "fmt" // Author structure type author struct { name string branch string } //Method with pointer //Receiver of author type func (a *author) show_1(abranch string) { (*a).branch = abranch } //Method with value //Receiver of author type func (a author) show_2() { a.name = "Gourav" fmt.Println("Author's name (Before): ", a.name) } func main() { //Initialization values //Author structure res := author{ name: "Sona", branch: "CSE", } fmt.Println("Branch Name (Before): ", res.branch) //Call show_1Method //Method with value (pointer method) res.show_1("ECE") fmt.Println("Branch Name (After): ", res.branch) //Call show_2Method //Method with pointer (value method) (&res).show_2() fmt.Println("Author's name (After): ", res.name) }
Output:
Branch Name (Before): CSE Branch Name (After): ECE Author's name (Before): Gourav Author's name (After): Sona
Method | Function |
---|---|
It contains a receiver. | It does not contain a receiver. |
It can accept pointers and values. | It cannot accept pointers and values at the same time. |
You can define methods with the same name but different types in the program. | In the program, it is not allowed to define functions with the same name but different types. |