函數是一組語句,可以在程序中重復使用。函數不會在頁面加載時自動執行。函數將通過調用函數來執行。
創建函數
要創建(通常稱為聲明)一個函數,請執行以下操作:
- 使用
func
關鍵字。 - 指定函數的名稱,后跟括號
()
。 - 最后,在花括號
{}
內添加定義函數應執行的代碼。
語法
func 函數名() {// 要執行的代碼
}
調用函數
函數不會立即執行。它們被“保存以供以后使用”,并在調用時執行。
在下面的示例中,我們創建了一個名為 “myMessage()” 的函數。開括號 {
表示函數代碼的開始,閉括號 }
表示函數的結束。該函數輸出 “I just got executed!”。要調用函數,只需寫下函數的名稱,后面跟著兩個括號 ()
:
示例
package mainimport ("fmt"
)func myMessage() {fmt.Println("I just got executed!")
}func main() {myMessage() // 調用函數
}
結果:
I just got executed!
一個函數可以被多次調用。
示例
package mainimport ("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 mainimport ("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 mainimport ("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 mainimport ("fmt"
)func myFunction(x int, y int) int {return x + y
}func main() {fmt.Println(myFunction(1, 2))
}
結果:
3
命名返回值
在Go中,您可以為函數的返回值命名。
在這里,我們將返回值命名為 result
(類型為int),并使用“裸露”的返回(即,我們使用return語句而不指定變量名)返回值:
示例
package mainimport ("fmt"
)func myFunction(x int, y int) (result int) {result = x + yreturn
}func main() {fmt.Println(myFunction(1, 2))
}
結果:
3
上面的示例也可以像這樣寫。在這里,return語句指定了變量名:
示例
package mainimport ("fmt"
)func myFunction(x int, y int) (result int) {result = x + yreturn result
}func main() {fmt.Println(myFunction(1, 2))
}
將返回值存儲在變量中
您也可以將返回值存儲在變量中,像這樣:
示例
package mainimport ("fmt"
)func myFunction(x int, y int) (result int) {result = x + yreturn
}func main() {total := myFunction(1, 2)fmt.Println(total)
}
多個返回值
Go函數也可以返回多個值。
在這里,myFunction()
返回一個整數(result)和一個字符串(txt1):
示例
package mainimport ("fmt"
)func myFunction(x int, y string) (result int, txt1 string) {result = x + xtxt1 = y + " World!"return
}func main() {fmt.Println(myFunction(5, "Hello"))
}
結果:
10 Hello World!
在這里,我們將兩個返回值存儲在兩個變量(a 和 b)中:
示例
package mainimport ("fmt"
)func myFunction(x int, y string) (result int, txt1 string) {result = x + xtxt1 = y + " World!"return
}func main() {a, b := myFunction(5, "Hello")fmt.Println(a, b)
}
結果:
10 Hello World!
如果由于某種原因不想使用其中一些返回的值,可以添加下劃線(_)來省略這個值。
在這里,我們要省略第一個返回的值(result - 存儲在變量a中):
示例
package mainimport ("fmt"
)func myFunction(x int, y string) (result int, txt1 string) {result = x + xtxt1 = y + " World!"return
}func main() {_, b := myFunction(5, "Hello")fmt.Println(b)
}
結果:
Hello World!
在這里,我們要省略第二個返回的值(txt1 - 存儲在變量b中):
示例
package mainimport ("fmt"
)func myFunction(x int, y string) (result int, txt1 string) {result = x + xtxt1 = y + " World!"return
}func main() {a, _ := myFunction(5, "Hello")fmt.Println(a)
}
遞歸函數
Go接受遞歸函數。如果一個函數調用自己并達到一個停止條件,那么這個函數就是遞歸的。
在以下示例中,testcount()
是一個調用自己的函數。我們使用x變量作為數據,每次遞歸時都會增加1(x + 1)。當x變量等于11(x == 11)時,遞歸結束。
示例
package mainimport ("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 mainimport ("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
,或者掃描下方二維碼,關注公眾號,即可獲取最新文章。
看完如果覺得有幫助,歡迎點贊、收藏和關注