Go 言語のgo func() {}()とChannelとは

Go 言語のgo func() {}()とChannelとはGo

Go 言語のgo func() {}()とChannelとは

go文を使用して関数を実行します。go文を使用するとgoroutineという軽量スレッドが実行されます。

package main

import (
  "log"
  "time"
)

func main() {
  go func() {
    log.Println("hello")
  }()
  time.Sleep(time.Second) // スリープしないとgo文より先にmainが終了してしまう
}
Channelとは

go文を使用した関数はスレッドになるため、mainが終わると実行されずに消えてなくなります。

Channelというメッセージングを使うことにより、goroutine間での変数の送受信ができます。

このChannelを利用することによって、スレッド間の同期処理に使用することができます。

Channelの使い方は簡単で、送信がchannel<-valueで受信が<-channelです。

package main

import "log"

func main() {
  fin := make(chan int) // Channelは参照型なのでmake()でインスタンスを生成
  go func() {
    log.Println("golang")
    fin <- 0 // メッセージ送信
  }()
  log.Println(<-fin) // ここでメッセージ受信するまでブロックする
}

Go 言語のgo func() {}()とChannelとは

コメント

タイトルとURLをコピーしました