在Go語言中,函數變量的聲明可以通過使用函數類型來實現。函數類型是一種特殊的類型,它包含了函數的簽名信息。
下面是一個函數變量聲明的示例:
package main
import "fmt"
// 聲明一個函數類型
type MyFunc func(int, int) int
// 聲明一個接受函數類型參數的函數
func calculate(a, b int, f MyFunc) int {
return f(a, b)
}
// 定義一個加法函數
func add(a, b int) int {
return a + b
}
// 定義一個減法函數
func subtract(a, b int) int {
return a - b
}
func main() {
// 聲明一個函數變量
var f MyFunc
// 將函數賦值給變量
f = add
// 使用函數變量進行計算
result := calculate(10, 5, f)
fmt.Println(result) // 輸出:15
// 將函數賦值給變量
f = subtract
// 使用函數變量進行計算
result = calculate(10, 5, f)
fmt.Println(result) // 輸出:5
}
在上面的示例中,我們首先聲明了一個函數類型 MyFunc
,它表示接收兩個整數參數并返回一個整數的函數。然后,我們定義了兩個函數 add
和 subtract
,它們的簽名與 MyFunc
類型相同。
接下來,我們聲明一個函數變量 f
,并將函數 add
賦值給它。然后,我們調用 calculate
函數,將 f
作為參數傳遞給它。calculate
函數會調用傳遞進來的函數,并將其返回值作為結果返回。
最后,我們將函數變量 f
賦值為 subtract
,再次調用 calculate
函數,得到不同的結果。
需要注意的是,函數變量可以像其他類型的變量一樣進行賦值、傳遞給其他函數,甚至可以將它們作為函數的返回值。這使得函數變量在編寫高階函數或回調函數時非常有用。