Goでのチャネルは使い方を誤ればpanicになりますが、これはGoの潔いところと思えばいいですが、チャネルの使い方で読み出しだけれども変数には代入しないというのがあります。
具体的には値を使わないのだから、単にダミーのリードですが実際の使い方としては終了待ちとして使うことになるんだろうと思います。
非常にシンプルな空読みの確認用のコードですが、チャネルでバッファーを2個用意して、最初の値は空読みすることで、2個目の値が変数xに代入されていることがわかります。
package main
import "fmt"
func main() {
ch := make(chan int, 2)
defer close(ch)
go func() {
ch <- 100
ch <- 200
}()
<- ch // dummy read
x := <- ch
fmt.Println(x)
}
<実行結果>
200
admin