首頁 >後端開發 >Golang >Go 的「decorator()」函數可以在沒有泛型的情況下處理具有特定回傳類型的函數嗎?

Go 的「decorator()」函數可以在沒有泛型的情況下處理具有特定回傳類型的函數嗎?

DDD
DDD原創
2024-12-26 19:47:31597瀏覽

Can Go's `decorator()` function handle functions with specific return types without generics?

在 Go 中將任意函數傳遞給參數

在 Go 中,將函數作為參數傳遞可以實現更大的靈活性和程式碼重用。但是,嘗試傳遞具有不同簽名的函數作為參數時存在一些限制。

考慮這樣的場景:您想要建立一個能夠包裝任何現有函數的decorator() 函數。對於具有單一參數和傳回值的函數(例如 funcA),使用 func(interface{}) interface{} 作為參數類型非常簡單。

問題: 函數可以嗎像funcB 一樣,它接受並返回特定類型(在本例中為字串),轉換為func(interface{}) interface{} 類型以與Decorator()?

答案: 不幸的是,如果不使用泛型,這在Go中是不可能的。原因在於函數之間參數傳遞機制的根本差異。

例如,接受結構體作為參數的函數單獨接收其每個成員。相反,接受包含該結構的介面{}的函數將接收兩個值:結構類型的描述符和指向結構的指標。

因此,為了實現所需的行為,需要一個適配器函數來彌合原始函數簽章和預期 func(interface{}) interface{} 類型之間的差距。

以上是Go 的「decorator()」函數可以在沒有泛型的情況下處理具有特定回傳類型的函數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn