函數是一組語句,可以在程式中重覆使用。函數不會在頁面載入時自動執行。函數將通過調用函數來執行。 ### 創建函數 要創建(通常稱為聲明)一個函數,請執行以下操作: - 使用 `func` 關鍵字。 - 指定函數的名稱,後跟括弧 `()`。 - 最後,在花括弧 `{}` 內添加定義函數應執行的代碼。 ...
函數是一組語句,可以在程式中重覆使用。函數不會在頁面載入時自動執行。函數將通過調用函數來執行。
創建函數
要創建(通常稱為聲明)一個函數,請執行以下操作:
- 使用
func
關鍵字。 - 指定函數的名稱,後跟括弧
()
。 - 最後,在花括弧
{}
內添加定義函數應執行的代碼。
語法
func 函數名() {
// 要執行的代碼
}
調用函數
函數不會立即執行。它們被“保存以供以後使用”,併在調用時執行。
在下麵的示例中,我們創建了一個名為 "myMessage()" 的函數。開括弧 {
表示函數代碼的開始,閉括弧 }
表示函數的結束。該函數輸出 "I just got executed!"。要調用函數,只需寫下函數的名稱,後面跟著兩個括弧 ()
:
示例
package main
import (
"fmt"
)
func myMessage() {
fmt.Println("I just got executed!")
}
func main() {
myMessage() // 調用函數
}
結果:
I just got executed!
一個函數可以被多次調用。
示例
package main
import (
"fmt"
)
func myMessage() {
fmt.Println("I just got executed!")
}
func main() {
myMessage()
myMessage()
myMessage()
}
結果:
I just got executed!
I just got executed!
I just got executed!
Go函數命名規則
- 函數名必須以字母開頭。
- 函數名只能包含字母數字字元和下劃線(A-z,0-9 和 _)。
- 函數名區分大小寫。
- 函數名不能包含空格。
- 如果函數名由多個單片語成,可以使用多詞變數命名的技巧。
參數和參數值
信息可以作為參數傳遞給函數。參數在函數內部充當變數。
在函數名後面,括弧內指定參數及其類型。您可以添加任意數量的參數,只需用逗號分隔即可:
語法
func 函數名(參數1 類型, 參數2 類型, 參數3 類型) {
// 要執行的代碼
}
帶參數的函數示例
下麵的示例有一個帶有一個參數 fname
(類型為字元串)的函數。當調用 familyName()
函數時,我們還傳遞了一個名字(例如,Liam),並且這個名字在函數內部使用,輸出多個不同的名字,但相同的姓氏:
示例
package main
import (
"fmt"
)
func familyName(fname string) {
fmt.Println("Hello", fname, "Refsnes")
}
func main() {
familyName("Liam")
familyName("Jenny")
familyName("Anja")
}
結果:
Hello Liam Refsnes
Hello Jenny Refsnes
Hello Anja Refsnes
註意:當將參數傳遞給函數時,它被稱為參數。因此,從上面的示例中可以看出:fname
是參數,而Liam、Jenny 和 Anja 是參數值。
多個參數
在函數內部,您可以添加任意數量的參數:
示例
package main
import (
"fmt"
)
func familyName(fname string, age int) {
fmt.Println("Hello", age, "歲的", fname, "Refsnes")
}
func main() {
familyName("Liam", 3)
familyName("Jenny", 14)
familyName("Anja", 30)
}
結果:
Hello 3 歲的 Liam Refsnes
Hello 14 歲的 Jenny Refsnes
Hello 30 歲的 Anja Refsnes
希望這些信息能幫助您理解Go語言中的函數、參數和參數值的使用方式。如果您有任何其他問題,請隨時提出。
返回值
如果您想讓函數返回一個值,您需要定義返回值的數據類型(如int、string等),併在函數內部使用return關鍵字:
語法
func 函數名(參數1 類型, 參數2 類型) 類型 {
// 要執行的代碼
return 輸出
}
函數返回示例
在下麵的示例中,myFunction()
接收兩個整數(x 和 y),並返回它們的加法(x + y)作為整數(int):
示例
package main
import (
"fmt"
)
func myFunction(x int, y int) int {
return x + y
}
func main() {
fmt.Println(myFunction(1, 2))
}
結果:
3
命名返回值
在Go中,您可以為函數的返回值命名。
在這裡,我們將返回值命名為 result
(類型為int),並使用“裸露”的返回(即,我們使用return語句而不指定變數名)返回值:
示例
package main
import (
"fmt"
)
func myFunction(x int, y int) (result int) {
result = x + y
return
}
func main() {
fmt.Println(myFunction(1, 2))
}
結果:
3
上面的示例也可以像這樣寫。在這裡,return語句指定了變數名:
示例
package main
import (
"fmt"
)
func myFunction(x int, y int) (result int) {
result = x + y
return result
}
func main() {
fmt.Println(myFunction(1, 2))
}
將返回值存儲在變數中
您也可以將返回值存儲在變數中,像這樣:
示例
package main
import (
"fmt"
)
func myFunction(x int, y int) (result int) {
result = x + y
return
}
func main() {
total := myFunction(1, 2)
fmt.Println(total)
}
多個返回值
Go函數也可以返回多個值。
在這裡,myFunction()
返回一個整數(result)和一個字元串(txt1):
示例
package main
import (
"fmt"
)
func myFunction(x int, y string) (result int, txt1 string) {
result = x + x
txt1 = y + " World!"
return
}
func main() {
fmt.Println(myFunction(5, "Hello"))
}
結果:
10 Hello World!
在這裡,我們將兩個返回值存儲在兩個變數(a 和 b)中:
示例
package main
import (
"fmt"
)
func myFunction(x int, y string) (result int, txt1 string) {
result = x + x
txt1 = y + " World!"
return
}
func main() {
a, b := myFunction(5, "Hello")
fmt.Println(a, b)
}
結果:
10 Hello World!
如果由於某種原因不想使用其中一些返回的值,可以添加下劃線(_)來省略這個值。
在這裡,我們要省略第一個返回的值(result - 存儲在變數a中):
示例
package main
import (
"fmt"
)
func myFunction(x int, y string) (result int, txt1 string) {
result = x + x
txt1 = y + " World!"
return
}
func main() {
_, b := myFunction(5, "Hello")
fmt.Println(b)
}
結果:
Hello World!
在這裡,我們要省略第二個返回的值(txt1 - 存儲在變數b中):
示例
package main
import (
"fmt"
)
func myFunction(x int, y string) (result int, txt1 string) {
result = x + x
txt1 = y + " World!"
return
}
func main() {
a, _ := myFunction(5, "Hello")
fmt.Println(a)
}
遞歸函數
Go接受遞歸函數。如果一個函數調用自己並達到一個停止條件,那麼這個函數就是遞歸的。
在以下示例中,testcount()
是一個調用自己的函數。我們使用x變數作為數據,每次遞歸時都會增加1(x + 1)。當x變數等於11(x == 11)時,遞歸結束。
示例
package main
import (
"fmt"
)
func testcount(x int) int {
if x == 11 {
return 0
}
fmt.Println(x)
return testcount(x + 1)
}
func main() {
testcount(1)
}
結果:
1
2
3
4
5
6
7
8
9
10
遞歸是一個常見的數學和編程概念。這有利於意味著您可以迴圈遍曆數據以達到一個結果。
開發人員應謹慎使用遞歸函數,因為很容易陷入編寫永遠不會終止的函數,或者使用過多的記憶體或處理器資源的函數。但是,當正確編寫時,遞歸可以是一種非常有效和數學上優雅的編程方法。
在以下示例中,factorial_recursion()
是一個調用自己的函數。我們使用x變數作為數據,每次遞歸時都會減小1(x - 1)。當條件不大於0時(即當它等於0時),遞歸結束。
示例
package main
import (
"fmt"
)
func factorial_recursion(x float64) (y float64) {
if x > 0 {
y = x * factorial_recursion(x - 1)
}
else {
y = 1
}
return
}
func main() {
fmt.Println(factorial_recursion(4))
}
結果:
24
希望這些信息對您有所幫助,幫助您理解Go語言中的返回值和遞歸函數的使用方式。如果您有任何其他問題,請隨時提出。
最後
為了方便其他設備和平臺的小伙伴觀看往期文章,鏈接奉上:
公眾號搜索Let us Coding
,知乎,開源中國,CSDN,思否,掘金,InfoQ,簡書,博客園,慕課,51CTO,helloworld,騰訊開發者社區,阿裡開發者社區
看完如果覺得有幫助,歡迎點贊、收藏和關註