成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 1.23:擁抱iter包,簡化你的迭代邏輯

開發 前端
類似的在 Java8 中引入的 lambda 表達式起初也是有很多人反饋難以閱讀與調試,經過這么多年的普及以及 IDE 的支持,現在已經成為大多數開發者的標配了。

最近 Go1.23 進入了凍結階段,意味著不再添加新功能,而且已經加入的功能也不再會刪除。

Go 1.23 正式引入了 iter 軟件包,這是一個專門用于 Iterators 的新特性。

該軟件包在 Go 1.22 中作為實驗性功能,需要通過 GOEXPERIMENT=rangefunc 參數啟用。

在 Go 1.23 中,開發者可以直接通過代碼實現迭代。

在這之前循環將切片數據全部轉換為大寫時的寫法:

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 迭代器之后:

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 
   }
 }

可以發現明顯的代碼量減少了,同時更符合函數式編程的特性。

通過性能比較,ToUpperByIter 方法性能更高,因為它不需要重新分配新的切片。

?  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 軟件包提供了兩種迭代器類型:

  • Seq 用于單個值的迭代
  • Seq2 用于鍵值對的迭代。

具體函數聲明如下:

// 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 等方法。

具體列表如下:

圖片圖片

圖片圖片

而社區對于 yield 和 iter 的引入有不同意見,有人認為它會引入復雜性和難以可理解的代碼,而另一些則認為它能夠幫助開發者簡化代碼并采用更多函數式編程。

個人覺得  Go 在新版本映入一些新特性是有必要的,這樣才能保持社區的活躍,同時選擇權也是交給開發者的。

類似的在 Java8 中引入的 lambda 表達式起初也是有很多人反饋難以閱讀與調試,經過這么多年的普及以及 IDE 的支持,現在已經成為大多數開發者的標配了。

參考鏈接:

  • 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
責任編輯:武曉燕 來源: crossoverJie
相關推薦

2024-09-02 00:30:41

Go語言場景

2024-09-09 08:56:03

2025-05-06 08:00:35

2025-05-06 05:00:00

2025-03-03 00:05:00

GoTimer調度器

2022-06-09 10:42:47

GoJSON

2024-09-02 10:21:21

2010-05-28 15:35:16

ibmdw系統架構

2020-12-13 11:38:09

Go語言clac包

2010-05-28 14:23:00

ibmdwWeb

2010-05-28 15:19:07

ibmdw軟件測試

2024-03-18 08:06:59

JavaGo開發

2025-03-07 09:01:14

商品模塊接口項目

2025-04-28 10:13:03

JavaScript數組代碼

2021-07-10 14:22:24

前端代碼條件邏輯

2018-10-08 08:42:06

編程語言DjangoPython

2010-05-28 15:22:58

ibmdw項目管理

2010-05-28 15:32:43

ibmdw系統開發

2010-10-22 14:43:09

移動開發

2010-05-28 14:01:10

ibmdw軟件架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99精品电影| 日韩精品一区二区三区高清免费 | 欧美一级高清片 | 成人影院在线视频 | 久久精品一级 | 午夜精品一区二区三区在线视 | 天堂资源 | 国产成人精品一区二区三区在线 | 国产一级在线 | 精品无码久久久久久久动漫 | 成人在线视频免费看 | 国产精品日韩欧美一区二区三区 | 国产精品免费观看 | 国产精品久久久久永久免费观看 | 女同久久另类99精品国产 | 久久精品99国产精品 | 一区二区日本 | 国产精品视频一二三区 | 国产色片在线 | 欧美国产激情二区三区 | 欧美日本韩国一区二区三区 | 韩日一区二区三区 | 国产精品国产三级国产aⅴ中文 | 99热国产精品| 欧美一级黄色网 | 99精品久久久久久久 | 91亚洲精品国偷拍自产在线观看 | 久久久国产精品 | 中文字幕 在线观看 | 在线免费黄色小视频 | 超碰综合| 久久成人免费视频 | 少妇一区二区三区 | 久久大| 国产精品免费一区二区三区四区 | 亚洲一区二区三区免费 | 一级片在线观看 | 成人1区2区| 精品国产一区二区三区性色av | 青青久草| 国产97在线视频 |