序文
ようこそ「Go言語による並行処理」へ!あなたがこの本を手にとってくれたこと、そしてGoの並行プログラミングについてこれから始まる全6章をあなたとともに探求できることを嬉しく思います。
Goは魅力的な言語です。Goが初めて世に公開されたときに、私はとても興味深く思いながら、Goの調査をしていたことを覚えています。Goは文法が簡潔で、信じられないほどコンパイルが速く、パフォーマンスもよく、ダックタイピングもサポートしていて、そして嬉しいことに、Goの並行処理に関するプリミティブ(Concurrency Primitives)の扱いが直感的でした。初めてgoというキーワードを使ってゴルーチンを生成(これについてはあとでちゃんとお話します!)したとき、思わず笑みがこぼれてしまいました。それまでいくつかの言語で並行処理を扱ってきましたが、これほどまで簡単に並行処理を扱える言語には出会ったことがありませんでした(存在しなかったという意味ではありません。単に私がそういう言語を使ったことがなかっただけです)。私は "Go" するべき道を見つけたのです。
過去数年間で、個人用のスクリプトからはじめて、個人的なプロジェクトを経て、何百何千行もの規模の業務プロジェクトでGoを使うようになりました。Goのコミュニティが言語とともに成長するかたわらで、Goでの並行処理に関するベストプラクティスが知見として共有されていきました。見つけたパターンに関してカンファレンス等で講演した人を見かけることもあります。しかし、いまだにコミュニティの中でもGoでの並行処理を使いこなすための包括的な手引はほとんどありません。
そのような状況を改善するために、私はこの本を書くことを決意しました。私はコミュニティの人たちにGoでの並行処理に関する、高品質でわかりやすい情報を提供したかったのです。たとえばGoでの並行処理の使い方、システムに導入する際のベストプラクティスとパターン、Goの並行処理の内部構造といった情報です。できる限り多くの情報をバランス良く書いたつもりです。 ...