本文深入探討了為什麼編譯器錯誤「type *T is point to type argument, not type」的複雜性愛嘗試在Go 中編譯涉及泛型的程式碼時會出現「參數」。
在 Go 泛型中,類型參數表示滿足指定約束的任何類型的佔位符。值得注意的是,該約束定義了類型參數上可用的操作集,但它並未直接定義從該類型參數派生的任何指標類型的屬性。這是遇到的錯誤訊息的關鍵。
錯誤訊息表示 *T 的方法集不會自動包含在具體類型上聲明的指標接收器方法受限制。這意味著,如果約束介面需要指標接收器方法,則具體類型必須使用指標接收器來實現它。
在提供的程式碼片段:
<code class="go">type GS interface { Id() string (*GS) SetId(string) }</code>
<code class="go">var storeA = &MyStore[*A]{}</code>
<code class="go">type MyStore[T GS] struct { values map[string]T } func (s *MyStore[T]) add(item T) {...}</code>透過進行這些調整,程式碼在語法和語義上變得正確。
以上是為什麼Go在使用泛型時會拋出錯誤「type *T ispointer to typeparameter, not typeparameter」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!