首頁 > 後端開發 > Golang > 共享方法如何與 Go 泛型的類型聯合約束一起使用?

共享方法如何與 Go 泛型的類型聯合約束一起使用?

Linda Hamilton
發布: 2024-12-20 15:38:14
原創
667 人瀏覽過

How Can Shared Methods Be Used with Go Generics' Type Union Constraints?

Go 泛型:解鎖類型聯合中的共享方法

在Go 的新泛型功能中,類型聯合約束允許綁定多個類型單一泛型類型參數。然而,問題出現了:如何在這些類型之間使用共享方法?

初始嘗試與編譯器錯誤

<br>type AB interface { <pre class="brush:php;toolbar:false">*A | *B
登入後複製

}

return true
登入後複製
}

func (b *B) some() bool {

return false
登入後複製
}

func some[TAB]( x T)布林值{

return x.some()   // undefined
登入後複製
}


上面的程式碼嘗試在函數some 中使用共享的some 方法,但遇到錯誤,因為編譯器無法確定是哪個一些要呼叫的方法。

使用介面的解決方法約束

要克服這個限制,可以直接在介面約束中加入共享方法:

<p>type AB interface {<br></p> <pre class="brush:php;toolbar:false">*A | *B
some() bool
登入後複製
}

func some[TAB](x T) bool {

return x.some()   // works
登入後複製
}


這確保泛型類型 T 必須滿足介面約束,其中包括 some 方法。

Go 1.18 中的限制

需要注意的是由於 Go 1.18 中的限制,此解決方法是臨時措施。 Go 規格允許在類型聯合中使用共用方法,但目前編譯器實作將其限制為在約束介面中明確宣告的方法。

Go 1.19 中的解決方案

Go 1.18 發行說明承認了這一限制,並明確計劃在Go 1.19 中刪除它,允許直接訪問類型聯合中的共享方法。這項改進將增強 Go 泛型的表現力和靈活性。

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

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