Heim > Artikel > Backend-Entwicklung > Was bedeutet Funktion in der Go-Sprache?
In der Go-Sprache ist eine Funktion ein organisiertes, wiederverwendbares Codesegment (Block), das zur Implementierung einer einzelnen spezifischen oder verwandten Funktion verwendet wird. Sein Hauptzweck besteht darin, die Modularität der Anwendung und die Wiederverwendungsrate des Codes zu verbessern Management und modulare Entwicklung. Funktionen verwenden normalerweise Parameter und Rückgabewerte, um mit dem Aufrufer zu interagieren. Parameter übergeben Daten an die Funktion, geben Werte zurück und die Funktion übergibt die verarbeiteten Daten an den Aufrufer.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, GO Version 1.18, Dell G3-Computer.
Funktion ist ein organisiertes, wiederverwendbares Codesegment, das zur Implementierung einer einzelnen oder verwandten Funktion verwendet wird, was die Modularität der Anwendung und die Wiederverwendungsrate des Codes verbessern kann.
Funktionsübersicht
Funktion, Funktion, unabhängiger Codeblock zur Implementierung bestimmter Funktionen. Der Hauptzweck ist die Wiederverwendung (Wiederverwendung) von Code, eine bessere Codeverwaltung und eine modulare Entwicklung. Funktionen verwenden normalerweise Parameter und Rückgabewerte, um mit dem Aufrufer zu interagieren. Parameter übergeben Daten an die Funktion, geben einen Wert zurück und die Funktion übergibt die verarbeiteten Daten an den Aufrufer. Funktionen in der Go-Sprache werden als Bürger erster Klasse bezeichnet. Dies bedeutet, dass es Funktionen höherer Ordnung, anonyme Funktionen, Abschlüsse und andere Funktionen unterstützt und erweiterte Funktionsmerkmale wie Schnittstellen erfüllen kann.
Funktionsdefinition
Funktion stellt die logische Struktur der Codeausführung dar. In der Go-Sprache sind die Grundkomponenten einer Funktion: Schlüsselwort func, Funktionsname, Parameterliste, Rückgabewert, Funktionskörper und Rückgabeanweisung Ein Programm enthält viele Funktionen und Funktionen sind grundlegende Codeblöcke.
Syntax:
Definition:
func 函数名(形参列表)(返回值类型列表) { 函数体,通常会有return语句,返回值 }
call:
函数名(实参列表)
function Name: Die Kennung der Funktion, verwendet, um die Funktion zu finden, und intern wird eine Adresse auf die Funktion zeigen Code. Formale Parameterliste: bestehend aus Variablen und Typen. Liste der Rückgabewerte: Es müssen mehrere Rückgabewerte angegeben werden. Funktionskörper: die spezifische Anweisung, die die Funktion implementiert. Rückgabeanweisung: Rückgabewertanweisung
Das Obige ist eine benannte Funktion und kann nicht in anderen Funktionen definiert werden.
Funktionsparameter
werden verwendet, um beim Aufrufen der Funktion Daten an die Funktion zu übergeben. Tatsächliche Parameter, tatsächliche Parameter. Beim Aufruf angegebene Parameter. Bezieht sich auf Parameter mit spezifischen tatsächlichen Daten. Formale Parameter, formale Parameter. Beim Definieren verwendete Parameter. Das bedeutet, dass die Funktion Parameter erfordert, die Parameter jedoch keine tatsächlichen Daten haben, wenn sie definiert werden. Beim Aufruf erfolgt die Zuweisung von Werten zu formalen Parametervariablen mithilfe tatsächlicher Parameter, die als Parameterübergabe bezeichnet wird. Während der Ausführung der Funktion enthalten die formalen Parameter bestimmte Daten und die formalen Parameter entsprechen den in der Funktion deklarierten Variablen.
Die Parameterübertragung ist in zwei Methoden unterteilt: Wertübertragung und Adressübertragung. Wenn die Adresse übergeben wird, muss der formale Parameter als Zeigertyp definiert werden und der Adressparameter muss beim Aufruf abgerufen werden. Beispielcode:
func funcTest(p1 int, p2 *int) { p1++ *p2++ fmt.Println(p1, *p2) } func main() { var ( a1 = 42 a2 = 42 ) funcTest(a1, &a2) // 参数赋值过程 fmt.Println(a1, a2) }
Das Obige gibt
43 43 42 43
Wertübergabe aus, die Funktion erhält eine Kopie der tatsächlichen Parameter. Wenn die Adresse übergeben wird, erhält die Funktion die tatsächliche Parameteradresse, sodass sich die Änderung der Variablen über die Adresse in der Funktion auch auf die tatsächlichen Parameter auswirkt.
Go unterstützt rest...eine unbestimmte Anzahl von Parametern. Platzieren Sie beim Definieren die unbegrenzte Anzahl formaler Parameter am Ende der formalen Parameterliste und verwenden Sie ... Typ Demonstration:
定义: func funcTest(op string, nums ...int) { fmt.Println(nums) // [4, 1, 55, 12], slice切片型数据 } 调用 funcTest("someOp", 4, 1, 55, 12)
Die empfangenen Parameter sind vom Typ Slice .
Funktionsrückgabewert
Die Rückgabeanweisung wird verwendet, um einen Rückgabewert zu generieren. Der Rückgabewerttyp muss beim Definieren der Funktion bestimmt werden und mehrwertige Rückgaben werden unterstützt. Demonstrationssyntax:
func funcTest() (int, string) { return 42, "Hank" }
Sie können die zurückgegebene Variable beim Definieren deklarieren. Diese Methode heißt benannte Rückgabe und die Demonstration lautet:
func funcTest() (num int, title string) { num = 42 title = "Hank" return }
Es besteht keine Notwendigkeit, Daten zurückzugeben, sondern geben Sie sie einfach direkt zurück!
Funktionsvariablen
Funktion kann als spezieller Zeigertyp betrachtet werden, der wie andere Typen in Variablen gespeichert werden kann. Auf die Funktion kann über Funktionsbezeichner und Variablen zugegriffen werden. Die Demonstration ist wie folgt:
func funcTest() { fmt.Println("func() type") } func main() { fmt.Printf("%T, (%v)\n", funcTest, funcTest) fn := funcTest fmt.Printf("%T, (%v)\n", fn, fn) funcTest() fn() }
Ausführungsergebnis:
func(), (0x48fe20) func(), (0x48fe20) func() type func() type
Es ist ersichtlich, dass der Funktionsbezeichner ein Zeiger auf die Funktion ist. Kann anderen Variablen zugewiesen werden.
Funktionsparameter
Funktionen können auch als Parameter anderer Funktionen verwendet werden. Die Demonstration lautet wie folgt:
func funcSuccess() { } func funcAsync(handle func()) { // 调用函数参数 handle() } // 传递函数到其他函数 funcAsync(success)
Diese Syntax für die Verwendung von Rückruffunktionen ist sehr nützlich, wenn es um asynchrone Logik geht.
Anonyme Funktion
Sie können anonyme Funktionen definieren. Anonyme Funktionen können in Variablen gespeichert, als Argumente übergeben oder sofort aufgerufen werden. Wenn eine Funktion vorübergehend verwendet wird, ist eine anonyme Funktion eine gute Wahl. Beispielsyntax:
赋值给变量 fn := func() { } fn() // 作为参数 someFunc(func() { }) // 立即调用 func() { }()
Closure
由于匿名函数可以定义在其他函数内,同时变量的作用域为层叠的,也就是匿名函数可以会访问其所在的外层函数内的局部变量。当外层函数运行结束后,匿名函数会与其使用的外部函数的局部变量形成闭包。示例代码:
var fn func() func outer() { v := 42 fn = func() { v ++ fmt.Print(v) } } outer() fn() // 43
此例中,fn 对应的匿名函数与 outer() 的局部变量 v,就形成了闭包。
函数调用示意图
var v = "global" func funcTest(v) { v = "funcTest" fmt.Println(v) } func main() { v := "main" funcTest(v) }
代码编译期间,会将函数代码存放在内存代码区。 函数被调用时,在运行期间会在函数运行栈区开辟函数栈,内部由局部变量标识符列表(就是局部变量),上层标识符列表引用等信息。直到运行结束,此空间才会被出栈,释放。 函数内部调用了新函数,新函数的执行空间入栈,要等到新函数执行空间出栈,调用他的函数才会被出栈。 以上代码的运行逻辑图如下:
递归调用
函数内部调用函数本身。称之为递归调用。示例代码:
func funcTest() { fmt.Println("run") funcTest() }
定义实现递归调用函数时,通常需要定义一个出口。用来确定何时不再进行递归调用了。一旦满足条件,则调用停止。例如:
func funcTest(v) { fmt.Println(v, "run") v ++ if v <= 10 { funcTest() } }
典型的应用有,树状菜单的处理,遍历目录,快速排序等。 递归调用的优势是编码简单,与描述的业务逻辑保持一致。
【相关推荐:Go视频教程】
Das obige ist der detaillierte Inhalt vonWas bedeutet Funktion in der Go-Sprache?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!