泛型型別參數不符:為什麼賦值失敗
在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中文網其他相關文章!