1 回答
TA贡献1829条经验 获得超6个赞
如果您想明确表示您实际上并未在函数中使用,则只需添加[T]到GenericCacheWrapperor的末尾即可。[_]T
package main
import (
"encoding/json"
"fmt"
)
type GenericCacheWrapper[T any] struct {
Container T
}
func (c GenericCacheWrapper[T]) MarshalBinary() (data []byte, err error) {
return json.Marshal(c.Container)
}
func (c GenericCacheWrapper[T]) UnmarshalBinary(data []byte) error {
return json.Unmarshal(data, &c.Container)
}
func main() {
wrapper := GenericCacheWrapper[int]{Container: 4}
data, err := wrapper.MarshalBinary()
if err != nil {
panic(err)
}
fmt.Println(data)
}
此规则在语言规范中定义:
泛型类型也可能有与之关联的方法。在这种情况下,方法接收者必须声明与泛型类型定义中存在的相同数量的类型参数。
但这背后的原因不是很清楚,也许是为了使编译器/类型检查的实现更容易。
相关:Go error: cannot use generic type without instantiation
- 1 回答
- 0 关注
- 141 浏览
添加回答
举报
