Go言語は、その設計から並行処理を強力にサポートしています。特に、ゴルーチンとチャネルはGoの並行処理の中核を成す概念です。この記事では、これらの概念を基礎から紹介し、エンジニアがGoを用いた効率的なプログラミングを行うための入門知識を提供します。
ゴルーチンは、軽量スレッドのようなもので、Goランタイムが管理する非常に効率的な並行実行ユニットです。ゴルーチンを開始するには、関数呼び出しの前に`go`キーワードを付けるだけです。このシンプルさがGoの強力な特徴の一つです。
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
チャネルは、ゴルーチン間でデータを送受信するための強力な手段です。チャネルを介して、ゴルーチンはデータの交換や同期を行うことができます。チャネルは`chan`キーワードを使用して宣言されます。
package main
import "fmt"
func main() {
messages := make(chan string)
go func() { messages <- "ping" }()
msg := <-messages
fmt.Println(msg)
}
このコードでは、匿名ゴルーチンがチャネルを介して文字列”ping”をメインゴルーチンに送信しています。メインゴルーチンは、そのメッセージを受信して表示します。
Goのゴルーチンとチャネルは、複雑な並行処理をシンプルに扱うための強力なツールです。これらの基本を理解することで、Go言語での効率的なプログラミングが可能になります。特に、エンジニアがこれらの概念を深く理解し、適切に使用することは、スケーラブルでメンテナンスしやすいアプリケーション開発に不可欠です。
※本記事はChatGPTを用いて生成しています。