通用類型賦值限制
考慮以下程式碼:
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中文網其他相關文章!