golang

Go のセミコロンの扱いが変わった。

09/12/22にリリースされたバージョンで、セミコロンの扱いが変わった。今までは、セミコロンは、ブロックの末尾と、括弧の後だけ省略OKだったんだけど、 それが、セミコロンなしでもOKになった。*1大元は、golang-nutsに投稿された以下の提案みたい。 http:/…

receive-only と、send-only な channel

Goのライブラリを見ていたら、 <-chan int という宣言があることに気づいた。試して分かったのだが、これは、受信専用のチャネルということらしい。 rcvc := make(<-chan int); rcvc <- i // invalid operation: rcvc <- 1 (send to receive-only type <-cha…

Go はレキシカルなクロージャもいける。

package main import "fmt"; func main() { count := 0; counter := func() int { count++; return count; }; repeat10(counter); } func repeat10(f func() int) { for i := 0; i < 10; i++ { fmt.Println(f()); } } 実行すると。 1 2 3 4 5 6 7 8 9 10

Google Go で ping pong

Google の Go で Erlang の 3.2 Message Passing にある ping pong を作ってみた。 package main import "fmt"; func main() { pongCh := make(chan string); pingCh := ping(3, pongCh); quit := pong(pongCh, pingCh); <-quit; } func ping(count int, pon…