首頁 >後端開發 >Golang >為什麼 Go 的泛型型別和不同型別參數不能互相賦值?

為什麼 Go 的泛型型別和不同型別參數不能互相賦值?

Linda Hamilton
Linda Hamilton原創
2024-12-19 11:22:09578瀏覽

Why Can't Go's Generic Types with Different Type Arguments Be Assigned to Each Other?

為什麼相同類型的泛型實例不能互相賦值?

Go 禁止給不同類型的泛型實例賦值彼此的參數,即使型別參數滿足介面關係。為了說明這一點,請考慮以下程式碼:

執行此程式碼會導致編譯錯誤:

出現此錯誤是因為使用新類型參數實例化泛型類型會創造一種獨特的類型。具體來說:

  • Props[Example] 是一種命名類型,
  • Props[Generic] 是另一個命名類型。

這兩種類型不是儘管範例實現了通用,但可以互換。因此,將ExampleProps(Props[Example]的實例)指派給Props[Generic]是無效的。

此行為擴展到使用any實例化的泛型。 any 只是一個為空介面別名的靜態型別:interface{}。它不等同於“any type”或 T。因此,使用 any 實例化的類型不能指派給使用其他特定類型實例化的類型。

要解決此問題,您可以使用類型參數實例化 Props ,確保函數的輸入和輸出類型一致。例如:

以上是為什麼 Go 的泛型型別和不同型別參數不能互相賦值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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