Heim > Artikel > Backend-Entwicklung > Was ist der Unterschied zwischen Funktionen und Methoden in der Go-Sprache?
Der Unterschied zwischen Funktionen und Methoden in der Go-Sprache: Bei gewöhnlichen Funktionen können Zeigertypdaten nicht direkt übergeben werden, wenn der Empfänger ein Werttyp ist. Bei Methoden kann die Methode direkt aufgerufen werden, wenn der Empfänger ein Werttyp ist mit einer Zeigertypvariablen.
Die Betriebsumgebung dieses Artikels: Windows 10-System, Go 1.11.2, Thinkpad T480-Computer.
Offizielle Erklärung des Unterschieds zwischen Funktionen und Methoden: Eine Methode ist eine Funktion, die einen Empfänger enthält. Der Empfänger kann ein Wert eines benannten oder Strukturtyps oder ein Zeiger sein. Alle Methoden eines bestimmten Typs gehören zum Methodensatz dieses Typs.
Unterschiede:
1. Für gewöhnliche Funktionen: Wenn der Empfänger (Funktionsparameter) ein Werttyp ist, können Zeigertypdaten nicht direkt übergeben werden und umgekehrt.
func function_name([parameter list]) [return_types] { 函数体 }
2. Für Methoden (z. B. Strukturmethoden): Wenn der Empfänger ein Werttyp ist, können Sie die Methode direkt mit einer Zeigertypvariablen aufrufen und umgekehrt.
func (variable_name variable_data_type) function_name() [return_type]{ /* 函数体*/ }
Sie können den Unterschied zwischen Methoden und Funktionen erkennen. Die Methode befindet sich im Schlüsselwort func. Der letzte ist der Empfänger anstelle des Funktionsnamens. Der Empfänger kann ein von uns definierter Typ sein. Dieser Typ kann eine Struktur oder eine Schnittstelle sein, oder wir können sogar grundlegende Datentypen neu definieren.
Go-Funktionen
Funktionen sind grundlegende Codeblöcke, die eine Aufgabe ausführen.
Go-Sprache hat zumindest eine main()-Funktion.
Sie können verschiedene Funktionen durch Funktionen unterteilen. Logischerweise führt jede Funktion eine bestimmte Aufgabe aus.
Die Funktionsdeklaration teilt dem Compiler den Namen, den Rückgabetyp und die Parameter der Funktion mit.
Go-Funktionen können mehrere Werte zurückgeben.
Die Go-Sprachstandardbibliothek bietet eine Vielzahl integrierter Funktionen, die verwendet werden können. Beispielsweise kann die Funktion len() Argumente verschiedener Typen akzeptieren und die Länge dieses Typs zurückgeben. Wenn wir einen String übergeben, wird die Länge des Strings zurückgegeben. Wenn wir ein Array übergeben, wird die Anzahl der im Array enthaltenen Elemente zurückgegeben.
1. Wertübertragung: Unter Wertübertragung versteht man das Kopieren einer Kopie der tatsächlichen Parameter in die Funktion beim Aufrufen der Funktion, sodass die tatsächlichen Parameter nicht beeinträchtigt werden, wenn die Parameter in der Funktion geändert werden.
2. Übergabe per Referenz: Übergabe per Referenz bedeutet, dass beim Aufrufen der Funktion die Adresse der tatsächlichen Parameter übergeben wird. Dann wirkt sich die Änderung der Parameter in der Funktion auf die tatsächlichen Parameter aus.
Go-Methoden
In der Go-Sprache gibt es sowohl Funktionen als auch Methoden. Eine Methode ist eine Funktion, die einen Empfänger enthält, der ein Wert eines benannten oder Strukturtyps oder ein Zeiger sein kann. Alle Methoden eines bestimmten Typs gehören zum Methodensatz dieses Typs.
Im Folgenden werden ein Strukturtyp und eine Methode dieses Typs definiert:
package mainimport ( "fmt" )/* 定义结构体 */type Circle struct { radius float64 }func main() { var c1 Circle c1.radius = 10.00 fmt.Println("Area of Circle(c1) = ", c1.getArea()) }//该 method 属于 Circle 类型对象中的方法func (c Circle) getArea() float64 { //c.radius 即为 Circle 类型对象中的属性 return 3.14 * c.radius * c.radius }
(Lernvideofreigabe: Einführung in die Programmierung)
Das obige Codeausführungsergebnis ist:
Area of Circle(c1) = 314
Beispiel
package structTest //普通函数与方法的区别(在接收者分别为值类型和指针类型的时候) //Date:2014-4-3 10:00:07 import ( "fmt" ) func StructTest06Base() { structTest0601() structTest0602() } //1.普通函数 //接收值类型参数的函数 func valueIntTest(a int) int { return a + 10 } //接收指针类型参数的函数 func pointerIntTest(a *int) int { return *a + 10 } func structTest0601() { a := 2 fmt.Println("valueIntTest:", valueIntTest(a)) //函数的参数为值类型,则不能直接将指针作为参数传递 //fmt.Println("valueIntTest:", valueIntTest(&a)) //compile error: cannot use &a (type *int) as type int in function argument b := 5 fmt.Println("pointerIntTest:", pointerIntTest(&b)) //同样,当函数的参数为指针类型时,也不能直接将值类型作为参数传递 //fmt.Println("pointerIntTest:", pointerIntTest(b)) //compile error:cannot use b (type int) as type *int in function argument } //2.方法 type PersonD struct { id int name string } //接收者为值类型 func (p PersonD) valueShowName() { fmt.Println(p.name) } //接收者为指针类型 func (p *PersonD) pointShowName() { fmt.Println(p.name) } func structTest0602() { //值类型调用方法 personValue := PersonD{101, "Will Smith"} personValue.valueShowName() personValue.pointShowName() //指针类型调用方法 personPointer := &PersonD{102, "Paul Tony"} personPointer.valueShowName() personPointer.pointShowName() //与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用 }
Verwandte Empfehlungen: Golang-Tutorial
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Funktionen und Methoden in der Go-Sprache?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!