问题内容
我想要一个接口,它可以将任何类型的参数传递给它的单个方法,并且我想要一个带有泛型的单个实现结构。
这是我的问题的超级简化版本:
package main
type MyInterface interface {
Set(val any)
}
type MyStruct[T any] struct {
val T
}
func NewMyStruct[T any]() *MyStruct[T] {
return &MyStruct[T]{}
}
func (s *MyStruct[T]) Set(val T) {
s.val = val
}
func main() {
var obj MyInterface
obj = NewMyStruct[any]() // accepted
obj = NewMyStruct[int]() // not accepted
obj = NewMyStruct[string]() // not accepted
}
有没有一种方法可以满足编译器的要求,并且在直接处理结构体时不会丢失 Set 方法的类型信息?
正确答案
代码
我认为你的代码可以这样修改
package main
import "fmt"
type MyInterface[T any] interface {
Set(value T)
}
type MyStruct[T any] struct {
val T
}
func NewMyStruct[T any]() *MyStruct[T] {
return &MyStruct[T]{}
}
func (s *MyStruct[T]) Set(val T) {
s.val = val
}
func main() {
var obj1 MyInterface[int]
obj1 = NewMyStruct[int]()
var obj2 MyInterface[string]
obj2 = NewMyStruct[string]()
var obj3 MyInterface[any]
obj3 = NewMyStruct[any]()
}
说明
每当使用参数化类型时,都必须将其定义中的类型参数替换为实际类型。这意味着必须实例化接口中的泛型类型。为此,您的接口应该这样声明。
// As-is
type MyInterface interface {
Set(val any)
}
// To-be
type MyInterface[T any] interface {
Set(val T)
}
并且在使用它时,您应该明确该 any
使用的是什么类型。
func main() {
var obj1 MyInterface[int]
obj1 = NewMyStruct[int]()
}
我引用了两页
[1] Go错误:无法使用泛型不实例化的类型
[2] 如何实现通用接口?
以上就是在 Go 中使用泛型类型结构实现接口方法的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数260
191.63 KB下载数245
143.91 KB下载数1139
183.71 KB下载数640
644.84 KB下载数2752
相关文章
发现更多好内容猜你喜欢
AI推送时光机在 Go 中使用泛型类型结构实现接口方法
后端开发2024-02-06
typeScript泛型使用和泛型接口结合的方法
后端开发2023-06-29
Go泛型实战教程之如何在结构体中使用泛型
后端开发2024-04-02
列出在 Go 中实现接口的所有类型
后端开发2024-04-04
Go错误:无法在没有实例化的情况下使用泛型类型
后端开发2024-02-09
java中的方法返回值使用泛型,实现灵活的返回值类型
后端开发2023-09-02
C#使用泛型方法实现操作不同数据类型的数组
后端开发2024-04-02
Spring Boot中如何使用Convert接口实现类型转换器
后端开发2024-04-02
如何在 Go 中使用不同的数据类型来实现编程算法?
后端开发2023-07-02
使用PHP的API接口:在移动应用中实现API接口的方法
后端开发2024-01-22
深入讲解数据库中Decimal类型的使用以及实现方法
后端开发2024-04-02
SQL中使用CONVERT函数转换数据类型的简单实现方法
后端开发2024-09-14
分布式数据类型的实现方法及在ASP中的应用探究
后端开发2023-05-26
Go语言接口使用教程:如何在编程算法中实现多态?
后端开发2023-10-23
对 Go 官方指南中关于所有方法使用相同类型接收器的建议感到困惑
后端开发2024-02-10
如何在Go语言中使用正确的数据类型实现高效的并发和存储?
后端开发2023-08-20
咦!没有更多了?去看看其它编程学习网 内容吧