首頁 > 後端開發 > Golang > 如何在 Go 中為實作介面的指標建立通用類型?

如何在 Go 中為實作介面的指標建立通用類型?

Linda Hamilton
發布: 2024-12-29 20:40:18
原創
407 人瀏覽過

How to Create a Generic Type for a Pointer Implementing an Interface in Go?

實作介面的指標的通用類型

在 Go 中使用介面時,可能需要傳入一個指向實作介面的結構體。這在定義泛型函數時可能具有挑戰性。

問題:

如何為實作介面的指標建立泛型類型?

答案:

選項1:修改界面定義

  1. 使用類型參數聲明接口,以指定其實現類型必須是指向其型別參數的指標:
type A[P any] interface {
    SomeMethod()
    *P
}
登入後複製
  1. 修改處理程序的簽章:
func Handler[P any, T A[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}
登入後複製

選項2:包裝介面(如果無法修改定義)

  1. 建立一個嵌入介面的包裝器介面原始介面並新增指向其類型的指標參數:
type MyA[P any] interface {
    A
    *P
}
登入後複製
  1. 修改處理程序的簽名以接受包裝的接口:
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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板