Overview
Go1.23 から導入される Iterator を使って Chunk 処理を書く - emahiro/b.log を書いた当日(日本時間だと翌日だけど)Go 1.23 が正式にリリースされていたので、サンプルとして range-over func を使った高階関数のセットを書いてみた。
🥳 Go 1.23.0 is released!
— Go (@golang) 2024年8月13日
📝 Release notes: https://t.co/GXY18wS0ec
⬇️ Download: https://t.co/KjiWuBUQxl#golang pic.twitter.com/L3NMD3RAWx
Repository
リポジトリは以下
Usecase
Filter や Chunk は登場シーンが多いんじゃないかと思う。
例えばフィルタリング処理であれば、ある処理を行うのにフィルタされたデータセットが必要な場合、今までは事前に for-loop でフィルタリング処理を行う or sices.DeleteFunc
等で条件にそぐわない要素を削除しておき、前処理で作られた slices に対して本処理を行っていたところ、Filter 関数を使うと for の中でフィルタされたデータを使うことができる。
list := .... for i := range hof.Filter(list, func(v int) bool { return v%2 == 0 }) { // 偶数のみが for-loop に入ってくる }
Chunk は前述したブログに記載した通り、配列を Chunk したセットが for-loop に入ってくるので、小刻みな処理を行いたいときに使える(かつパフォーマンスも良い)
Reduce や Map/Map2 といった処理は書いては見たものの、利用したいシーンはまだ特に思いつかない。
大きなデータを扱うようなユースケースであればデータの前処理や後処理で活躍しそうな気はした。
その他
この辺で書いてみた関数の一部 (Chunk とか)は slices package に iterator として用意されています。