Python のバックグラウンドを持ち、Go を使い始めたばかりの私は、Go の map() および reduce() 関数に相当するものを探していることに気付きました。私はそれらを見つけられなかったので、for ループに戻りました。たとえば、これは map() の代わりに使用したもので、mapFunction は別の場所で定義されています。
data := make([]byte, 1024)
count, err := input.Read(data) // error handling removed from this snippet
for i:=0; i<count; i++ {
data[i] = mapFunction(data[i])
}
これは、reduce() の代わりに使用したものです。コードがスライス内の各項目を移動するときに、CSV 内のフィールドの引用を追跡するために使用している 2 つの状態変数があります。
data := make([]byte, 1024)
count, err := input.Read(data) // error handling removed from this snippet
for i:=0; i<count; i++ {
data[i], stateVariable1, stateVariable2 =
reduceFunction(data[i], stateVariable1, stateVariable2)
}
ここに私の質問があります:
- 私が見逃した組み込みの機能はありますか?
- これらのそれぞれに可変スライスを使用するのは適切ですか?
- map() にゴルーチンを使用するのは良い考えでしょうか? これにより、ファイルを読み取る IO 操作と、各項目でマッピング関数を実行するプロセスを切り離すことができ、したがって並列化が可能になりますか?
- 2 つの状態変数は先行するすべてのデータによって定義されており、順次処理を進める必要があるため、reduce() 関数にはゴルーチンは適していないというのは正しいでしょうか。言い換えれば、この順次プロセスは並行アーキテクチャの恩恵を受けられないのでしょうか?
ありがとう!
ps - 完全なコードはこちら: https://github.com/dbro/csvquote/blob/go/csvquote.go