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の大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント