在 Go 中,將函數作為參數傳遞可以實現更大的靈活性和程式碼重用。但是,嘗試傳遞具有不同簽名的函數作為參數時存在一些限制。
考慮這樣的場景:您想要建立一個能夠包裝任何現有函數的decorator() 函數。對於具有單一參數和傳回值的函數(例如 funcA),使用 func(interface{}) interface{} 作為參數類型非常簡單。
問題: 函數可以嗎像funcB 一樣,它接受並返回特定類型(在本例中為字串),轉換為func(interface{}) interface{} 類型以與Decorator()?
答案: 不幸的是,如果不使用泛型,這在Go中是不可能的。原因在於函數之間參數傳遞機制的根本差異。
例如,接受結構體作為參數的函數單獨接收其每個成員。相反,接受包含該結構的介面{}的函數將接收兩個值:結構類型的描述符和指向結構的指標。
因此,為了實現所需的行為,需要一個適配器函數來彌合原始函數簽章和預期 func(interface{}) interface{} 類型之間的差距。
以上是Go 的「decorator()」函數可以在沒有泛型的情況下處理具有特定回傳類型的函數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!