Golangを理解し、Grafanaを使って監視する方法(前半)

gavin.zhou
12 min readJul 13, 2020

始める前に、皆様に伝えたいことがあります。この記事には、私がgo channelについて理解することができた知識について書きました。良い方法でどのように使用することができるかをお伝えできればと思います。

What is Go Channels?

Go Channelとは何でしょうか。

Golang docsは、

「チャンネルは、同時進行のgoroutineを接続するパイプです。あるgoroutineからチャンネルに値を送信し、その値を別のgoroutineに受信することができます」としています。

これは単純なパイプのようなものです。一方の側から送信し、もう一方の側から受信するというものです。次にメールキューをお見せしますが、 goroutinesを使えば非同期にすることができます。

How to use Channels in Go

package mainimport ("fmt")func main() {// Create the channelmessages := make(chan string)// run a go routine to send the messagego func() { messages <- "ping" }()// when you receive the message store it in msg variablemsg := <-messages// print received messagefmt.Println(msg)}
  • 1行目: make を使ってチャンネルを作成しました
  • 2行目: goroutineでメッセージを送りました
  • 3行目: メッセージを受信し、それをmsg変数に保存します
  • 4行目: メッセージをプリントします

2 行目では goroutine を使用していますが、これがないとリスナーがいないのでコードは動作しません。これをデッドロックと呼んでいます。

messages := make(chan string)

--

--