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) // ここでメッセージ受信するまでブロックする
}

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^



コメント