並列処理
Go言語における並列処理を実現してくれるのは言語名にもなっているGoroutineの実行とその並列処理タスクを管理するChannelを使います。
A Tour of GoのConcurrencyが公式ドキュメントですが、よくあるドキュメンテーションと同様に実践を通して学ぶ方が早いので、ここから読み始めると少し理解に時間がかかるかもしれません。
https://tour.golang.org/concurrency/1
実際に書いて見て、並列処理がなぜ簡単と言われるのか直感的に理解をしたので、基本的なコードを追って説明していきます。以下の記事を参考にしました。
https://blog.narenarya.in/concurrent-http-in-go.html
実際にGo言語で記述して見ると、他の言語に比べてシンプルであるかどうかは変わらないと思いましたが、Goではスレッドやプロセスについてあまり考えずにgo funcすることでgoroutineは賢く処理を振り分けてくれるようでした。まだまだあると思いますが、go, defer, channelsを使うだけでも実用して楽しさを感じることができると思います。
おまけでhttpリクエストのコード
net/httpパッケージのドキュメンテーションを参考に実装して見ます。
簡単に実装できました。URLはご自身でご用意するか好きなウェブサイトにリクエストして見てください。Go Playgroundでnet/httpパッケージを使うとエラーが出てしまうようなので、ローカルで実行して見てください。
上のコードと合わせると、並列でhttpリクエストができました。ベンチマークなどには使えるかもしません。
上のコードと合わせると、並列でhttpリクエストができました。ベンチマークなどには使えるかもしません。