首頁 >後端開發 >Golang >Go 中的泛型如何處理具有基於指標的介面參數的函數?

Go 中的泛型如何處理具有基於指標的介面參數的函數?

Barbara Streisand
Barbara Streisand原創
2024-12-29 00:36:09134瀏覽

How Can Generics in Go Handle Functions with Pointer-Based Interface Parameters?

指標的通用介面

在 Go 中,可以透過泛型來定義指標實現的介面。考慮以下場景:

問題:

  • 您有一個帶有方法 SomeMethod() 的介面 A。
  • 您有一個結構體實作 A 介面的指標 *Aimpl。
  • 您想要建立一個接受函數的通用函數 Handler帶有 A 參數,並將指向 Aimpl 的指標指派給其參數。

使用具有類型參數的通用介面的解決方案:

要實現此目的,您可以使用類型參數聲明 A接口,確保實現類型是指向其類型的指針參數:

type A[P any] interface {
    SomeMethod()
    *P
}

然後,修改Handler的簽名如下:

func Handler[P any, T A[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}

使用Wrapper接口的解決方案:

如果不能修改A的定義,可以將其包裝到自己的介面中MyA:

type MyA[P any] interface {
    A
    *P
}

然後,更新Handler的簽名以使用MyA介面:

func Handler[P any, T MyA[P]](callback func(result T)) {
    result := new(P)
    callback(result)
}

以上是Go 中的泛型如何處理具有基於指標的介面參數的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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