Golang Go语言泛型以后会支持特例化吗
RT ,网上搜不到有相关计划的言论和类似的问题。。
最近有个工具库想改成泛型。发现没有特例化根本写不出来。连 isEmpty 这种都写不出来。(samber/lo 的 IsEmpty 只能作用于 comparable )。
其他语言泛型之所以这么花很大的原因就是特例化。。
我在想如果函数本身特例化不好实现。以后会不会方法实现类似于
func IsEmpty[T any](x T) bool {
switchtype T {
case comparable:
var zero T
return x == zero
case xxx:
其他实现,每个 case 块做到 build 隔离,
要不 如果是 uncomparable 类型,就无法构建 == 了
case YYY:
}
}
Golang Go语言泛型以后会支持特例化吗
更多关于Golang Go语言泛型以后会支持特例化吗的实战教程也可以访问 https://www.itying.com/category-94-b0.html
你这是动态语言的写法,像 py 一样 isinstance 。编译型语言应该是 func IsEmpty[T comparable](x T) bool 这样写
更多关于Golang Go语言泛型以后会支持特例化吗的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
特化,rust 和 cpp 支持的
你这个也不是不能搞,你写一个接口把 case 对应的接口全写进去,然后 T 用这个接口做约束…就是用起来很烦。
或者你还是用 switch t.(type)这种非泛型思路写吧。
很可能不会支持…
go 的博客里有这么一句话
“write Go programs by writing code, not by defining types”
哈哈,我倒是感觉以后没准会,毕竟 JAVA 的基础类型泛型特例化都要来
如果自己根据类型不同,写成 IsEmpty1 ,IsEmpty2 ,有什么不方便使用的呢?
这里不方便的点,就是编译时难处理的点
唉…go 的泛型还是一个残废呀
泛型与 go 的语言设计思想就是背道而驰的, 即便弄出个泛型, 也是这种夹生饭.
短期不用想
你有没想过限定 T 为某个 type interface { IsEmpty bool() }?
可以把基础类型定义为自定义类型,然后通过“泛型接口”
type CanEmptyT interface {
~int | ~string | ~[]byte
Empty() bool
}
type SliceByte []byte
func (sb SliceByte) Empty() bool {
if sb == nil || *(*int)(unsafe.Add(unsafe.Pointer(&sb), 8 /WORD/)) == 0 {
return true
} else {
return false
}
}
func DoSomething[T CanEmptyT](v T) {
if v.Empty() {
fmt.Println(“null”)
} else {
fmt.Println(v)
}
}
func main() {
var a SliceByte
DoSomething(a)
var b []byte
DoSomethingSliceByte
}
这种泛型与接口结合的方法我觉得可以使 go 达到“完备”;但是目前有性能损失: https://www.infoq.cn/article/xprmcl5qbf6yvdroajyn
在 golang 里面搞这些也不太现实,毕竟 golang 这种语言的目标就是一把梭快速开发
来.NET 吧,你想到的都有
这篇文章真的干, 看了半个多小时 好多知识还是没能消化😭
GO 是最简单的方式,完成最好的效果
作为IT领域GO语言方面的专家,对于Golang(Go语言)泛型的发展有一定的了解。关于Go语言泛型未来是否会支持特例化(Specialization),以下是我的分析:
Go语言在1.18版本中正式引入了泛型,这一更新被视为Go语言社区的一个巨大里程碑。泛型通过类型参数和类型约束提高了代码的复用性,使得开发者能够编写出更加通用和灵活的代码。然而,就目前而言,Go语言的泛型实现并不支持特例化。
特例化通常指的是在泛型编程中,针对特定类型对泛型代码进行专门化的过程。这可以使得代码在保持泛型特性的同时,针对特定类型进行优化,提高运行效率。然而,Go语言的设计哲学一直强调简洁性和可读性,而特例化可能会增加代码的复杂性和维护难度。
虽然目前Go语言泛型不支持特例化,但Go语言的开发者社区一直在积极讨论和探索泛型的相关特性。未来,随着Go语言的不断发展和社区需求的不断变化,Go语言泛型是否支持特例化仍有待观察。建议持续关注Go语言的官方更新和社区动态,以获取最新的信息和进展。