今日介紹在Golang中接受的函式進階用法,
本人在工作中幾乎沒用到過
但這些方法真的很有趣,
就當作自己練習吧~~
一般情況都是別的程式呼叫函式,
但函式其實可以呼叫自己,此方法稱為遞迴,
使用遞迴可以將大問題拆成小問題處理、並使程式碼簡潔,
此外,必須要設定結束條件,避免無窮迴圈發生。
以經典遞迴題目階乘為例:4! = 1 * 2 * 3 * 4 = 24,
程式範例如下:
package main
import (
"fmt"
)
func main() {
//hof("hi", callback)
y := recursion(4) //階乘
fmt.Println(y)
}
func recursion(x int) int {
y := recursion(x - 1)
if x > 0 {
return x * y
} else {
return 1
}
}
輸出結果如下:
24
函式另一種特殊的用法為Callback,
概念為將函式作為參數傳入至函式,
程式範例如下:
package main
import (
"fmt"
)
func Afunc(callback func()) {
fmt.Println("Afunc")
callback()
}
func Bfunc() {
fmt.Printf("Bfunc")
}
func main() {
Afunc(Bfunc)
}
輸出結果如下:
Afunc
Bfunc
最後介紹 defer延遲敘述式,使用此功能函式將回延遲執行。
程式範例如下:
package main
import (
"fmt"
)
func Afunc() {
fmt.Println("Afunc")
}
func Bfunc() {
fmt.Printf("Bfunc")
}
func main() {
defer Bfunc()
Afunc()
}
輸出結果如下:
Afunc
Bfunc