iT邦幫忙

2023 iThome 鐵人賽

DAY 1
0
自我挑戰組

Go語言自學挑戰系列 第 11

第十一天:函式Function 2/2

  • 分享至 

  • xImage
  •  

函式進階技巧介紹

今日介紹在Golang中接受的函式進階用法,

本人在工作中幾乎沒用到過/images/emoticon/emoticon20.gif

但這些方法真的很有趣,

就當作自己練習吧~~

遞迴 Recursion

一般情況都是別的程式呼叫函式,

但函式其實可以呼叫自己,此方法稱為遞迴

使用遞迴可以將大問題拆成小問題處理、並使程式碼簡潔,

此外,必須要設定結束條件,避免無窮迴圈發生。

以經典遞迴題目階乘為例: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 Function

函式另一種特殊的用法為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

最後介紹 defer延遲敘述式,使用此功能函式將回延遲執行。

程式範例如下:

package main

import (
	"fmt"
)
func Afunc() {
	fmt.Println("Afunc")
}
func Bfunc() {
	fmt.Printf("Bfunc")
}
func main() {
	defer Bfunc()
	Afunc()
}

輸出結果如下:

Afunc
Bfunc

參考資料

  1. https://www.w3schools.com/go/go_function_recursion.php
  2. https://matthung0807.blogspot.com/2022/01/go-callback-function-example.html
  3. https://ithelp.ithome.com.tw/articles/10187510
  4. https://www.evanlin.com/golang-know-using-defer/

上一篇
第十天:函數Function 1/2
下一篇
第十二天:golang 結構 Struct介紹
系列文
Go語言自學挑戰29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言