本文深入探讨了为什么编译器错误“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中文网其他相关文章!