以前ツイートしていたGo言語の特徴満点なHello worldを、Qiita記事とて残しておきます。
"Hello, #番号 world" を0〜99番、goroutineで並列処理して表示させる、というシンプルな目標を実装しているだけです。しかし、意外とGo言語の中枢に踏み込むコードが必要で、面白いです。
チャネルを使わないと途中で終わっちゃいますし、ちゃんとgoroutineに引数を渡してあげないと番号が重なってしまいます。実はツイートした時はこれらの対応をしておらず、今回記事化するために真面目に実行してみて、途中で終わっているとか変なことに気付きました。笑
ソース
package main
import "fmt"
func main() {
max := 100
quit := make(chan bool, max)
for i := 0; i < max; i++ {
go func(j int) {
fmt.Printf("Hello, #%v world\n", j)
quit <- true
}(i)
}
for i := 0; i < max; i++ {
<- quit
}
}
実行結果
Hello, #4 world
Hello, #0 world
Hello, #1 world
Hello, #14 world
Hello, #16 world
Hello, #15 world
Hello, #20 world
Hello, #9 world
Hello, #5 world
Hello, #3 world
Hello, #6 world
Hello, #17 world
Hello, #21 world
Hello, #18 world
Hello, #12 world
Hello, #7 world
Hello, #11 world
Hello, #10 world
Hello, #23 world
Hello, #19 world
Hello, #2 world
Hello, #22 world
Hello, #24 world
Hello, #8 world
Hello, #25 world
Hello, #63 world
Hello, #27 world
Hello, #59 world
Hello, #28 world
Hello, #60 world
Hello, #66 world
Hello, #99 world
Hello, #67 world
Hello, #62 world
Hello, #68 world
Hello, #44 world
Hello, #85 world
Hello, #87 world
Hello, #58 world
Hello, #33 world
Hello, #72 world
Hello, #39 world
Hello, #45 world
Hello, #41 world
Hello, #74 world
Hello, #90 world
Hello, #36 world
Hello, #46 world
Hello, #91 world
Hello, #47 world
Hello, #26 world
Hello, #55 world
Hello, #71 world
Hello, #97 world
Hello, #57 world
Hello, #75 world
Hello, #76 world
Hello, #37 world
Hello, #92 world
Hello, #43 world
Hello, #13 world
Hello, #61 world
Hello, #65 world
Hello, #32 world
Hello, #38 world
Hello, #31 world
Hello, #54 world
Hello, #98 world
Hello, #48 world
Hello, #94 world
Hello, #49 world
Hello, #77 world
Hello, #95 world
Hello, #89 world
Hello, #93 world
Hello, #51 world
Hello, #56 world
Hello, #70 world
Hello, #88 world
Hello, #73 world
Hello, #34 world
Hello, #35 world
Hello, #52 world
Hello, #42 world
Hello, #79 world
Hello, #82 world
Hello, #53 world
Hello, #64 world
Hello, #83 world
Hello, #78 world
Hello, #96 world
Hello, #80 world
Hello, #86 world
Hello, #30 world
Hello, #40 world
Hello, #29 world
Hello, #69 world
Hello, #84 world
Hello, #81 world
Hello, #50 world