Go 中可以將函數當作參數傳遞嗎?
Java 允許透過使用匿名內部類別將函數作為參數傳遞。 Go 是否提供了類似的機制來促進此功能?
答:
當然! Go 支援透過匿名函數和閉包將函數傳遞為參數。以下是一些範例:
範例 1:
package main import "fmt" type convert func(int) string func value(x int) string { return fmt.Sprintf("%v", x) } func quote123(fn convert) string { return fmt.Sprintf("%q", fn(123)) } func main() { result := quote123(value) fmt.Println(result) // Output: "123" }
在此範例中,convert 函數類型定義為採用整數並傳回字串。值函數透過傳回輸入整數的字串表示形式來實現轉換。 quote123 函數接受轉換函數為參數,並傳回呼叫函數結果的引號字串表示形式,值為 123。
範例 2:
package main import "fmt" func main() { result := quote123(func(x int) string { return fmt.Sprintf("%b", x) }) fmt.Println(result) // Output: "1111011" }
這裡,一個匿名函數作為參數傳遞給 quote123 函數。匿名函數將輸入整數轉換為其二進位字串表示形式。
範例 3:
package main import "fmt" func main() { foo := func(x int) string { return "foo" } result := quote123(foo) fmt.Println(result) // Output: "foo" }
在本例中,命名函數 foo 被傳遞為quote123 的參數。 foo 函數只是為任何輸入返回字串“foo”。
這些範例示範了在 Go 中將函數作為參數傳遞的靈活性和強大功能,使您能夠建立通用且可重複使用的程式碼。
以上是Go 函數可以當作參數傳遞嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!