實作介面的指標的通用類型
在 Go 中使用介面時,可能需要傳入一個指向實作介面的結構體。這在定義泛型函數時可能具有挑戰性。
問題:
如何為實作介面的指標建立泛型類型?
答案:
選項1:修改界面定義
type A[P any] interface { SomeMethod() *P }
func Handler[P any, T A[P]](callback func(result T)) { result := new(P) callback(result) }
選項2:包裝介面(如果無法修改定義)
type MyA[P any] interface { A *P }
func Handler[P any, T MyA[P]](callback func(result T)) { result := new(P) callback(result) }
用法:
兩個選項都允許傳遞一個指向實作泛型函數 A 介面的結構的指標處理程序。例如:
type Aimpl struct {} func (a *Aimpl) SomeMethod() {} func main() { Handler(func(a *Aimpl) { fmt.Printf("%#v\n", a) }) }
以上是如何在 Go 中為實作介面的指標建立通用類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!