首頁 > 後端開發 > Golang > 為什麼我不能在 Go 泛型中將 `Props[Example]` 指派給 `Props[Generic]` ?

為什麼我不能在 Go 泛型中將 `Props[Example]` 指派給 `Props[Generic]` ?

Susan Sarandon
發布: 2024-12-20 09:15:11
原創
406 人瀏覽過

Why Can't I Assign `Props[Example]` to `Props[Generic]` in Go Generics?

通用類型賦值限制

考慮以下程式碼:

type Generic interface {
    ID() string
}

type Props[G Generic] struct{}

type Example struct {
    id string
}

func (example Example) ID() string {
    return example.id
}

var ExampleProps = Props[Example]{}

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

此程式碼無法編譯並出現錯誤:

cannot use ExampleProps (variable of type Props[Example]) as Props[Generic] value in return statement
登入後複製

這是為什麼會發生?

Go 泛型在使用不同型別參數實例化時會建立全新的命名型別。在這種情況下,Props[Example] 和 Props[Generic] 是不同的命名類型,即使 Example 實作了 Generic。

透過類型參數化實現靈活性

解決此問題並保持靈活性,可以使用類型參數實例化Props:

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

這種方法允許函數為實作Generic 的特定泛型類型T 傳回Props[T]。

摘要

在 Go 泛型中,使用不同型別參數來實例化泛型型別會導致不同的命名型別。因此,嘗試將一種類型指派給另一種類型,即使它們的類型參數滿足特定條件,也是不允許的。使用類型參數化提供了在此類場景中保持靈活性的解決方案。

以上是為什麼我不能在 Go 泛型中將 `Props[Example]` 指派給 `Props[Generic]` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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