網頁

2021/6/26

Golang 函式為變數及引數傳遞 Function values and pass as arguments

Go語言的function(函式)可作為變數及另一個函式的引數(arguments)傳遞。


下面的hello()函式接收一個字串參數並在前加上"Hello"印出;
hi()函式也是接收一個字串參數但在前加上"Hi"印出;
greeting()函式接收兩個參數,第一個為函式func(string),第二個為字串。

package main

import "fmt"

func hello(name string) {
    fmt.Println("Hello " + name + "!")
}

func hi(name string) {
    fmt.Println("Hi " + name + "!")
}

func greeting(f func(string), s string) {
    f(s)
    fmt.Println("How are you?")
}

func main() {
    greeting(hello, "John")
}

hello()hi()的型態與greeting()的第一個參數定義相同,因此都可以作為引數傳入。

main()呼叫greeting(),第一個參數以hello傳入,第二個參數輸入"John"印出以下。

Hello John!
How are you?

若第一個參數改以hi傳入則印出以下。

func main() {
    greeting(hi, "John")
}
Hi John!
How are you?

當函式傳入另一個函式為參數時稱為Callback Function
而接收函示為參數的函式又稱為Higher Order Function
所以hello()hi()是callback function;greeting()是higher order function。


沒有留言:

張貼留言