Go 關鍵字,例如 go 和 defer Expect 函式呼叫作為參數。是否有一種專用類型可以達到相同的目的,允許函數接收函數呼叫作為參數而不是函數?
不幸的是,沒有這樣的型別去。 go 和 defer 的行為是內建在語言規範中並由編譯器強制執行。
相反,可以將函數值用作變數或值。這些可以稍後像常規函數一樣調用。
<code class="go">func myFunc() { fmt.Println("hi") } func main() { var f func() f = myFunc f() // This calls the function value stored in f: myFunc in this example }</code>
在某些情況下,需要為函數呼叫自動保存參數。對於特定的函數類型,這可以透過引入具有相同簽名的返回無參數函數的輔助函數來實現。這些閉包使用已儲存的參數呼叫原始函數。
反射可用來避免手動參數複製。但是,它涉及傳遞函數而不是調用它,從而減慢了進程。
使用方法時出現異常。方法值可以保存接收者的副本,從而允許自動保存方法呼叫的參數。
<code class="go">type myParams struct { format string i int s string } func (mp myParams) Call() { fmt.Printf(mp.format, mp.i, mp.s) } func main() { p := myParams{format: "%d %q\n", i: 1, s: "Hello, playground"} launch(p.Call) // p is saved here p.i, p.s = 2, "changed" time.Sleep(time.Second) }</code>
注意:這些方法都沒有提供與所需功能的精確匹配。如果參數可能發生變化,則在將函數傳遞給已儲存參數的助手之前,需要手動複製。
以上是你能在 Go 中定義函數呼叫的型別嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!