GoのChannelをコピーしてコピー元のChannelをクローズするとコピー先のChannelもcloseされる

Goのプログラムを書いてたらはまってたのでメモしておく。

package main

func main() {
    ch1 := make(chan struct{})
    ch2 := ch1
    close(ch1)
    close(ch2)
}

Result

panic: close of closed channel

goroutine 1 [running]:
main.main()
    /tmp/sandbox237471277/prog.go:7 +0x80

Program exited: status 2.

Playgroundのリンク play.golang.org