日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2024-06-24 09:10:30 164觀看
導讀最近 Go1.23 進入了凍結階段,意味著不再添加新功能,而且已經加入的功能也不再會刪除。Go 1.23 正式引入了 iter 軟件包,這是一個專門用于 Iterators 的新特性。該軟件包在 Go 1.22 中作為實驗性功能,需要通過 GOEXPERIMEN

最近 Go1.23 進入了凍結階段,意味著不再添加新功能,而且已經加入的功能也不再會刪除。IvP28資訊網——每日最新資訊28at.com

Go 1.23 正式引入了 iter 軟件包,這是一個專門用于 Iterators 的新特性。IvP28資訊網——每日最新資訊28at.com

該軟件包在 Go 1.22 中作為實驗性功能,需要通過 GOEXPERIMENT=rangefunc 參數啟用。IvP28資訊網——每日最新資訊28at.com

在 Go 1.23 中,開發者可以直接通過代碼實現迭代。IvP28資訊網——每日最新資訊28at.com

在這之前循環將切片數據全部轉換為大寫時的寫法:IvP28資訊網——每日最新資訊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 迭代器之后:IvP28資訊網——每日最新資訊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    } }

可以發現明顯的代碼量減少了,同時更符合函數式編程的特性。IvP28資訊網——每日最新資訊28at.com

通過性能比較,ToUpperByIter 方法性能更高,因為它不需要重新分配新的切片。IvP28資訊網——每日最新資訊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 軟件包提供了兩種迭代器類型:IvP28資訊網——每日最新資訊28at.com

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

具體函數聲明如下:IvP28資訊網——每日最新資訊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 等方法。IvP28資訊網——每日最新資訊28at.com

具體列表如下:IvP28資訊網——每日最新資訊28at.com

圖片圖片IvP28資訊網——每日最新資訊28at.com

圖片圖片IvP28資訊網——每日最新資訊28at.com

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

個人覺得  Go 在新版本映入一些新特性是有必要的,這樣才能保持社區的活躍,同時選擇權也是交給開發者的。IvP28資訊網——每日最新資訊28at.com

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

參考鏈接:IvP28資訊網——每日最新資訊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.www897cc.com/showinfo-26-95916-0.htmlGo 1.23:擁抱iter包,簡化你的迭代邏輯

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 電商系統開發所遇問題及C#實例解析

下一篇: C++多線程中的互斥鎖

標簽:
  • 熱門焦點
  • 6月安卓手機性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發布之前,性能榜的榜單大體會以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領先
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從“最美JK”起到“最美女星&r
  • K6:面向開發人員的現代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • 服務存儲設計模式:Cache-Aside模式

    Cache-Aside模式一種常用的緩存方式,通常是把數據從主存儲加載到KV緩存中,加速后續的訪問。在存在重復度的場景,Cache-Aside可以提升服務性能,降低底層存儲的壓力,缺點是緩存和底
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 蘋果、三星、惠普等暫停向印度出口筆記本和平板電腦

    集微網消息,據彭博社報道,在8月3日印度突然禁止在沒有許可證的情況下向印度進口電腦/平板及顯示器等產品后,蘋果、三星電子和惠普等大公司暫停向印度
  • iQOO 11S評測:行業唯一的200W標準版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,該機不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
  • iQOO 11S或7月上市:搭載“雞血版”驍龍8Gen2 史上最強5G Soc

    去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,iQOO 11不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競屏,同時在快充
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續還將開展常態化登記。  北京科技教育體驗基
Top 主站蜘蛛池模板: 清苑县| 民权县| 邵东县| 雅安市| 开鲁县| 观塘区| 合水县| 友谊县| 类乌齐县| 商丘市| 阜阳市| 黑水县| 泸溪县| 射洪县| 五常市| 华阴市| 阳东县| 临漳县| 安龙县| 兰州市| 盐亭县| 麻城市| 依安县| 玉环县| 伊吾县| 九龙坡区| 新密市| 额敏县| 通州区| 青阳县| 江安县| 镇巴县| 光山县| 民勤县| 张家界市| 获嘉县| 和平区| 墨玉县| 东辽县| 石泉县| 潍坊市|