ジンジャー研究室

長めのつぶやき。難しいことは書きません。

Go 言語を始めた

1週間前くらいから Go 言語を触っている。

動機

オーディオ処理をやりたい。 今まで Web Audio API で色々やっていたが、細かいことをやろうとすると色々制約があってめんどくさい。

というわけで選択肢:

  • Node.js: パフォーマンスが不安
  • C++: 資産は多いけどそもそも C++ で安全に書くのが難しい
  • Rust: 安全で機能も充実してるけどコーディングで色々考えることが多くて面倒そう
  • Go: 並行処理が手軽に書けそうなので採用

(wasm ターゲットの場合 GC 不要な Rust が軽そうだけど)

最初の感想

1日目で本を読んで2日目に音が出た。簡単で最高。

現在の感想

ゴルーチンとチャンネルで手軽に色々できるんだけど、ちゃんと設計するのが難しい。

  • 関数内と呼び出し元のどちらに go を書くべきか
  • 関数内と呼び出し元のどちらでチャンネルを生成すべきか
  • WaitGroup で何をどこで待つべきか
  • どこで新しい Context を作るべきか
  • cancel()close(channel) のどちらでループを抜けるか
  • os.Signal をトラップしてループを止めるのが綺麗だけど失敗すると終了できない
  • ゴルーチンリークが不安で眠れない

可能性が無限大すぎる...色々試して確かめていくしかない。

読んだもの