首頁 > 後端開發 > Golang > 為什麼我不能在 Go 中將一種泛型類型指派給另一種類型,即使它們的類型參數相容?

為什麼我不能在 Go 中將一種泛型類型指派給另一種類型,即使它們的類型參數相容?

DDD
發布: 2025-01-04 12:30:33
原創
656 人瀏覽過

Why Can't I Assign One Generic Type to Another in Go, Even If Their Type Arguments Are Compatible?

理解泛型類型賦值限制

在Go 中,一個泛型不能被賦值給另一個,即使它們的類型參數可能是由於泛型實例化的性質所致。

通用類型Go

泛型類型允許透過定義可與不同資料類型一起使用的範本來重複使用程式碼。實例化泛型類型時,您可以提供特定類型參數來指定所使用的特定資料類型。

賦值限制

將一種泛型類型的值分配給另一種泛型類型可能會並不總是被允許。這是因為使用不同類型參數實例化泛型類型會產生兩個不同的命名類型。

例如:

type Props[G Generic] struct{}

type Example struct{}

func (Example) ID() string { return "" }

var ExampleProps = Props[Example]{}

func Problem() Props[Generic] {
    return ExampleProps // Compilation error
}
登入後複製

在此範例中,Example 實作了 Generic 介面。但是,Props[Example] 和 Props[Generic] 仍然被視為不同的類型。因此,不允許將ExampleProps(類型為Props[Example])指派給Problem(返回Props[Generic])。

如果你想要在泛型型別之間指派值,可以使用型別參數來實例化泛型型別。例如:

func Problem[T Generic](v T) Props[T] {
    return Props[T]{Value: v}
}
登入後複製

在這種情況下,Problem 會採用泛型參數 T 並以 T 實例化 Props。這提供了更大的靈活性,可以在類型參數滿足特定條件的情況下使用。

以上是為什麼我不能在 Go 中將一種泛型類型指派給另一種類型,即使它們的類型參數相容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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