当前位置:首页 > 科技  > 软件

Go 1.23:拥抱iter包,简化你的迭代逻辑

来源: 责编: 时间:2024-06-24 09:10:30 68观看
导读最近 Go1.23 进入了冻结阶段,意味着不再添加新功能,而且已经加入的功能也不再会删除。Go 1.23 正式引入了 iter 软件包,这是一个专门用于 Iterators 的新特性。该软件包在 Go 1.22 中作为实验性功能,需要通过 GOEXPERIMEN

最近 Go1.23 进入了冻结阶段,意味着不再添加新功能,而且已经加入的功能也不再会删除。qXB28资讯网——每日最新资讯28at.com

Go 1.23 正式引入了 iter 软件包,这是一个专门用于 Iterators 的新特性。qXB28资讯网——每日最新资讯28at.com

该软件包在 Go 1.22 中作为实验性功能,需要通过 GOEXPERIMENT=rangefunc 参数启用。qXB28资讯网——每日最新资讯28at.com

在 Go 1.23 中,开发者可以直接通过代码实现迭代。qXB28资讯网——每日最新资讯28at.com

在这之前循环将切片数据全部转换为大写时的写法:qXB28资讯网——每日最新资讯28at.com

func Convert[S any, D any](src []S, mapFn func(s S) D) []D {       r := make([]D, 0, len(src))       for _, i := range src {          r = append(r, mapFn(i))       }       return r   }      func ToUpByString() {       sl := []string{"hello", "world", "golang"}       s0 := Convert(sl, func(v string) string { return strings.ToUpper(v) })       for _, v := range s0 {          // do business     }   }

而在使用新的 Iter 迭代器之后:qXB28资讯网——每日最新资讯28at.com

func Backward(s []string) func(yield func(string) bool) {   return func(yield func(string) bool) {     for i := len(s) - 1; i >= 0; i-- {       yield(strings.ToUpper(s[i]))     }   } }  func ToUpperByIter() {   sl := []string{"hello", "world", "golang"}   for v := range Backward(sl) {     // do business    } }

可以发现明显的代码量减少了,同时更符合函数式编程的特性。qXB28资讯网——每日最新资讯28at.com

通过性能比较,ToUpperByIter 方法性能更高,因为它不需要重新分配新的切片。qXB28资讯网——每日最新资讯28at.com

➜  huizhou92 git:(master) ✗ go test -bench . -count=3 goos: darwin goarch: arm64 pkg: huizhou92 cpu: Apple M1 Pro BenchmarkToUpByString-10         8568332               128.7 ns/op BenchmarkToUpByString-10         9310351               128.6 ns/op BenchmarkToUpByString-10         9344986               128.5 ns/op BenchmarkToUpByIter-10          12440120                96.22 ns/op BenchmarkToUpByIter-10          12436645                96.25 ns/op BenchmarkToUpByIter-10          12371175                96.64 ns/op PASS ok      huizhou92       8.162s

iter 软件包提供了两种迭代器类型:qXB28资讯网——每日最新资讯28at.com

  • Seq 用于单个值的迭代
  • Seq2 用于键值对的迭代。

具体函数声明如下:qXB28资讯网——每日最新资讯28at.com

// Seq is an iterator over sequences of individual values. // When called as seq(yield), seq calls yield(v) for each value v in the sequence, // stopping early if yield returns false.   type Seq[V any] func(yield func(V) bool)      // Seq2 is an iterator over sequences of pairs of values, most commonly key-value pairs. // When called as seq(yield), seq calls yield(k, v) for each pair (k, v) in the sequence, // stopping early if yield returns false.   type Seq2[K, V any] func(yield func(K, V) bool)

iter 软件包的目标是提供一种统一和高效的迭代方法,并且已经在 map 包中添加了 All 和 Keys 等方法。qXB28资讯网——每日最新资讯28at.com

具体列表如下:qXB28资讯网——每日最新资讯28at.com

图片图片qXB28资讯网——每日最新资讯28at.com

图片图片qXB28资讯网——每日最新资讯28at.com

而社区对于 yield 和 iter 的引入有不同意见,有人认为它会引入复杂性和难以可理解的代码,而另一些则认为它能够帮助开发者简化代码并采用更多函数式编程。qXB28资讯网——每日最新资讯28at.com

个人觉得  Go 在新版本映入一些新特性是有必要的,这样才能保持社区的活跃,同时选择权也是交给开发者的。qXB28资讯网——每日最新资讯28at.com

类似的在 Java8 中引入的 lambda 表达式起初也是有很多人反馈难以阅读与调试,经过这么多年的普及以及 IDE 的支持,现在已经成为大多数开发者的标配了。qXB28资讯网——每日最新资讯28at.com

参考链接:qXB28资讯网——每日最新资讯28at.com

  • https://tip.golang.org/doc/go1.23#iterators
  • https://levelup.gitconnected.com/go-1-23-new-iter-package-4ae649a0e910
  • https://pkg.go.dev/iter@master#hdr-Iterators

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-95916-0.htmlGo 1.23:拥抱iter包,简化你的迭代逻辑

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 电商系统开发所遇问题及C#实例解析

下一篇: C++多线程中的互斥锁

标签:
  • 热门焦点
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 零售大模型“干中学”,攀爬数字化珠峰

    零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 本地生活这块肥肉,拼多多也想吃一口

    本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页“充值中心”入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 自律,给不了Keep自由!

    自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • “又被陈思诚骗了”

    “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 微博大门常打开,迎接海外画师漂洋东渡

    微博大门常打开,迎接海外画师漂洋东渡

    作者:互联网那些事“起猛了,我能看得懂日语了”。“为什么日本人说话我能听懂?”“中文不像中文,日语不像日语,但是我竟然看懂了”…&hell
  • 三星显示已开始为AR设备研发硅基LED微显示屏

    三星显示已开始为AR设备研发硅基LED微显示屏

    7月18日消息,据外媒报道,随着苹果首款头显产品Vision Pro在6月份正式推出,AR/VR/MR等头显产品也就将成为各大公司下一个重要的竞争领域,对显示屏这一关
Top
Baidu
map