首頁 > 後端開發 > Golang > 如何存取Go泛型聯合約束中的共享方法?

如何存取Go泛型聯合約束中的共享方法?

Mary-Kate Olsen
發布: 2024-12-23 19:41:11
原創
189 人瀏覽過

How Can I Access Shared Methods in Go Generics' Union Constraints?

使用Go 泛型存取聯合約束中的共享方法

在Go 泛型(v1.18) 中,類型聯合約束允許定義接受以下介面的介面來自多種類型的值。然而,問題是如何存取這些類型之間的共享方法。

考慮以下範例:

type A struct {}
type B struct {}

type AB interface {
    *A | *B
}

func (a *A) some() bool {...}
func (b *B) some() bool {...}

func some[T AB](x T) bool {
    return x.some()  // error
}
登入後複製

在此程式碼中,雖然 A 和 B 共用某個方法,但嘗試從某些[TAB]存取它時發生錯誤。這是因為編譯器只辨識在約束介面中明確宣告的方法。

要解決此問題,可以將共享方法加入介面限制中,如下所示:

type AB interface {
    *A | *B
    some() bool
}

func some[T AB](x T) bool {
    return x.some()  // Works
}
登入後複製

這種方法將 T 限制為實作 some 方法的 A 或 B 類型。

但是,此解是 Go 1.18 泛型中限制的解。語言規範表明這應該是可能的,但編譯器不支援它。 Go 1.18 發行說明中已確認此限制,並記錄在問題 #51183 中。希望 Go 1.19 中刪除此限制。

以上是如何存取Go泛型聯合約束中的共享方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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