channel
Golangではchannelというキューのような仕組みがあります。channelを介してデータの受け渡しができるため、処理を分割して並列処理がしやすくなります。しかし、便利な半面むやみに使うと処理を追うのが大変になるので気をつけてください。
定義
channelにはcpacityというchannel内に保持しておけるバッファのサイズを定義することができます。バッファが0になるとchannelへのデータ送信はブロックされるので非常に重要な値となります。capacityを指定していない場合は0となります。
// capacityなし 0 ch := make(chan int) // capacityあり 10 ch10 := make(chan int, 10)
close
close()関数を使うとchannelを閉じることができ、受信側に閉じたことを知らせることができます。閉じられたchannelにはデータの送受信ができません。
close(ch)
送信
channelへの送信は<-でできます。capacityが足りなくなった場合、受信されて容量があくまで送信処理がブロックされます。
ch <- 1
受信
受信方法はいろいろあるのですが一番基本的な2つを紹介します。
最初の方法はchannelから値だけを取得します。2つ目はokがfalseだった場合、channelがcloseされた通知を受け取り、vにはゼロ値が入ります。
// 値だけを受信 v <-ch // channelがcloseされたかを確認 v, ok <-ch
おすすめ書籍
Go言語の初心者から上級者までしっかり学べる書籍となっています。
本書籍はサンプルコードが非常に豊富で、HTTP/Websockert通信、CLIツール、Google/Twitter API、MongoDB等を使った様々なアプリケーションの作り方を学べます。
Go言語特有のgorutine、channelに関してもしっかりと説明されているのでこの書籍を一通り写経するとGoの全体像がつかめるかと思います。もちろん自分は全て写経しました。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す