Go言語(ゴーげんご)は、Googleが開発したプログラミング言語です。シンプルさと効率の良さを兼ね備えているため、特に並行処理を行うのに優れています。ここでは、Go言語の並行処理における重要な概念である「goroutine」と「チャネル」について紹介します。
goroutine(ゴルーチン)は、Go言語で並行処理を実現するための軽量のスレッドです。通常のスレッドよりも少ないメモリを使用し、非常に簡単に並行処理を行うことができます。
goroutineを使うには、関数の前に「go」を付けるだけです。これによって、その関数は新しいgoroutineとして実行されます。
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("こんにちは、Go言語!")
}
func main() {
go sayHello() // goroutineを開始する
time.Sleep(1 * time.Second) // goroutineが終了するのを待つ
}
このコードでは、sayHello
関数がgoroutineとして実行されます。time.Sleep
を使って、メイン関数が終了する前に待機しています。
チャネルは、goroutine間でデータをやり取りするための仕組みです。って言うと難しそうだけど、実はとても分かりやすいです。チャネルを使うことで、安全にデータを送受信できます。
チャネルを作成するには、make
関数を使います。
ch := make(chan string)
これで、string
型のデータを送受信できるチャネルが作成されました。
チャネルを使ってデータを送るためには、<-
を使います。以下は簡単な例です。
package main
import (
"fmt"
)
func greet(ch chan string) {
ch <- "こんにちは、チャネル!"
}
func main() {
ch := make(chan string)
go greet(ch) // goroutineを開始する
message := <-ch // チャネルからメッセージを受け取る
fmt.Println(message)
}
この例では、greet
関数がチャネルを使ってメッセージを送信し、メイン関数で受け取って表示しています。
Go言語の並行処理は、goroutineとチャネルのおかげでとても簡単に扱えます。これらを活用することで、より効率的なプログラムを書けるようになります。