🍃

Goのiterをwrapして拡張してみる

2024/09/27に公開

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を適用して、結果を収集して変数に設定する処理が書けるようにしてみます。

コードはこちらです。

https://github.com/hirokisan/witer

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