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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-28 16:47:13312瀏覽

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

泛型型別參數不符:為什麼賦值失敗

在Go 中,試著將Props[Example] 類型的值賦給變數輸入Props[Generic] 將導致錯誤。這是因為,儘管範例實作了泛型接口,但使用不同類型參數實例化泛型類型會產生不同的命名類型。

使用泛型進行型別實例化

指定型別時泛型型別的參數,無論是在函式參數或傳回型別中,都會實例化一個新的、不同的類型。例如:

func Problem() Props[Generic] {
    return ExampleProps
}

這一行使用型別參數 Generic 實例化 Props,得到 Props[Generic]。類似地,ExampleProps 使用型別參數Example 進行實例化,產生Props[Example].

型別不相容性與賦值

As Props[Example] 與Props[ Generic]是兩種不同的命名類型,即使用作參數的類型(例如,Example 和Generic)滿足賦值條件,例如實作介面。

這個概念類似於用 any 實例化的泛型。 any 是靜態類型,是 interface{} 的別名,它與 T 或任何特定類型都不符。

解決問題

解決賦值錯誤在保持靈活性的同時,考慮使用類型參數實例化Props:

type Props[G Generic] struct{ Value G }

func Problem[T Generic](v T) Props[T] {
    return Props[T]{ Value: v }
}

這允許您使用類型參數實例化Props滿足必要的約束並按預期使用返回值。

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

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