1週間前くらいから Go 言語を触っている。
動機
オーディオ処理をやりたい。 今まで Web Audio API で色々やっていたが、細かいことをやろうとすると色々制約があってめんどくさい。
というわけで選択肢:
- Node.js: パフォーマンスが不安
- C++: 資産は多いけどそもそも C++ で安全に書くのが難しい
- Rust: 安全で機能も充実してるけどコーディングで色々考えることが多くて面倒そう
- Go: 並行処理が手軽に書けそうなので採用
(wasm ターゲットの場合 GC 不要な Rust が軽そうだけど)
最初の感想
1日目で本を読んで2日目に音が出た。簡単で最高。
現在の感想
ゴルーチンとチャンネルで手軽に色々できるんだけど、ちゃんと設計するのが難しい。
- 関数内と呼び出し元のどちらに
go
を書くべきか - 関数内と呼び出し元のどちらでチャンネルを生成すべきか
- WaitGroup で何をどこで待つべきか
- どこで新しい Context を作るべきか
cancel()
とclose(channel)
のどちらでループを抜けるか- os.Signal をトラップしてループを止めるのが綺麗だけど失敗すると終了できない
- ゴルーチンリークが不安で眠れない
可能性が無限大すぎる...色々試して確かめていくしかない。