Golang Go语言1.18 泛型体验如何,咋考虑要不要从17升上去,有啥bug吗

null
Golang Go语言1.18 泛型体验如何,咋考虑要不要从17升上去,有啥bug吗

24 回复

如果 IDE 是 Goland 那需要切到 EAP 版本了,最新一个稳定版虽说支持 1.18 但还是有不少泛型相关的 lint bug…

更多关于Golang Go语言1.18 泛型体验如何,咋考虑要不要从17升上去,有啥bug吗的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


可以的很爽。消滅了不少冗餘代碼

不用泛型没有什么 bug

有用泛型的话,一些 linter 支持有问题

还没用上泛型,不过 workspace 真香

  1. IDE 方面,goland EAP 对泛型的支持还有很多 bug ,该检测出的语法错误没有被检测出来,正确的语法被视为错误标红之类
    2. 很多人没意识到这次的泛型给 Go 语言增加多少复杂度。Go1.18 为了支持泛型引入了一大堆新的概念,也对包括接口、类型之类已经存在的概念定义做了大幅修改,同时还引入了一大堆非常非常细碎的规则限制(细碎到很多 linter 都还没能做到正确检测)
    3. 至于语言层面的 bug 因为才刚发布不久并没有遇到
    4. 用泛型写数据结构、通用工具函数是真的爽





官方插件也有 bug ?

gopls 部分功能不支持,但是仅限于使用泛型语法的部分功能。

具体支持情况可以参考:
https://github.com/golang/go/issues/50558

其实 2 的问题主要来源是 x/tools/go/ssa 的泛型支持,这个是目前各大 linter 支持泛型最大的 blocker 。

具体的 track 可以参考,从目前看甚至已经推迟到 1.19 了😂
https://github.com/golang/go/issues/48525

因为我实在太菜不知道泛型具体用途和优点。

一般情况下,除非库都到某特性非用不可了,那时候我才会主动去为了语言某个特性去特意升级到某版本。

还有点不习惯。
到时候看看主流的几个框架会不会使用泛型重写吧,看看他们是怎么写的。

#9 一般做基础库会用到泛型比较多, 因为处理不同的输入类型,需要抽象为统一的泛型

自己的项目爱咋折腾咋折腾, 公司的项目最好不要升, 你用了泛型就是绑架同事

刚开始用上,写起来比以前舒服多了。
就是历史遗留的 map 和 slice 的泛型不在方括号内有点不统一

最常见的一个例子,你要去除某个 slice 中的重复项。这个 slice 可能是[]string ,可能是[]int ,可能是[]Int64 。。。
没有泛型的情况下,你要么给每一种数据类型写一个去重函数,要么传 interface{}进去,用反射做,这两种情况不管怎么写都蛋疼。

泛型怎么会绑架同事,能举个例子么…

暂时不想学新特性, 不想意想不到的事情耽误我正点下班 :)

尝试了一下,MQTT 的库不兼容又退回 17 了

goland 的提示还不能完全识别,对于复杂的泛型定义,然后你在一些方法上面会遇到标红,但是实际跑测试没有问题。
如下
XXX[T ~map[K]V, K conparable, V any]
后来干脆改成简单的,也能正常工作。
XXX[ K conparable, V any]

还有一些不能支持的使用方法,对于结构体的方法,不能额外再返回新的类型,除非单独写一个普通的函数。
func(x XX[T]) FooT, K any{}

期待 1.19 ,上面提到的问题就据说会解决。

这个在 Goland EAP 版本已经修复了… 这几天用下来 EAP 没什么太大的问题

自从 golang 出了 1.18 ,我就润去 kotlin 了

虽然升到了 18, 但是还没用上泛型语法… 感觉还行…

嗯,那时候可能没有泛型了

关于Golang 1.18的泛型体验,可以说这是一个重大且受欢迎的改进。在1.18版本之前,Go语言缺乏直接的泛型支持,导致在处理不同类型的数据时需要编写大量重复的代码。而1.18版本引入泛型后,开发者可以编写更通用、更简洁的代码,显著提高了代码复用性和开发效率。

考虑到是否从1.17版本升级到1.18版本,建议权衡以下因素:

  1. 新特性与性能提升:1.18版本不仅引入了泛型,还带来了性能上的提升(如CPU速度提高20%)。这些新特性和性能提升对于追求高效和简洁的Go语言开发者来说是非常有吸引力的。
  2. 稳定性与兼容性:在升级前,建议详细阅读1.18版本的发布说明,了解新特性的具体实现和可能存在的兼容性问题。同时,确保你的代码库和第三方依赖库与1.18版本兼容。
  3. bug与修复:任何新版本都可能存在bug,但Go语言社区通常会积极修复这些问题。在决定升级前,可以查看官方和社区的反馈,了解是否存在影响你项目的严重bug。

总的来说,如果你希望体验Go语言的最新特性并追求更高的性能,升级到1.18版本是一个不错的选择。但在升级前,请务必做好充分的准备和测试工作。

回到顶部