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

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

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

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

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

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

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

在这之前循环将切片数据全部转换为大写时的写法:Bya28资讯网——每日最新资讯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 迭代器之后:Bya28资讯网——每日最新资讯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    } }

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

通过性能比较,ToUpperByIter 方法性能更高,因为它不需要重新分配新的切片。Bya28资讯网——每日最新资讯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 软件包提供了两种迭代器类型:Bya28资讯网——每日最新资讯28at.com

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

具体函数声明如下:Bya28资讯网——每日最新资讯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 等方法。Bya28资讯网——每日最新资讯28at.com

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

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

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

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

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

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

参考链接:Bya28资讯网——每日最新资讯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

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

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

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

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

标签:
  • 热门焦点
  • 红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为“纯欲天花板”的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 华为Mate60系列模具曝光:采用硕大圆形后置相机模组+拼接配色方案

    据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将迎来更新,有望在9-10月份带来全新的华为Mate60
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24 巧系列一体机目前已在线上线下各平台同步开售。onebot M24 巧系列采用一体化轻薄机身设计,最薄处为 10.15mm,拥有宝石红、午夜蓝、石墨绿、雅致
Top