🍃
Goのiterをwrapして拡張してみる
Goのiterを拡張してみます。
値に対してフィルタリングや変更の適用を可能にします。
Rustで記述すると以下のようなイメージです。
fn main() {
let items: Vec<i32> = [1, 2, 3]
.into_iter()
.filter(|v| v % 2 == 0)
.map(|v| v * 10)
.collect();
}
iterator adaptorsを適用して、結果を収集して変数に設定する処理が書けるようにしてみます。
コードはこちらです。
package main
import (
"slices"
"github.com/hirokisan/witer"
)
func main() {
items := witer.New(slices.Values([]int64{1, 2, 3})).Filter(func(v int64) bool {
return v%2 == 0
}).Apply(func(v int64) int64 {
return v * 10
}).Collect()
}
メソッドチェーンでつないで変数定義が可能になりました。
Discussion