以下のようなコードの中にある go func() {} () の最後の丸括弧 () がついている理由がわからなかったので調べた。
deferでも同じかもしれない。
package main
import (
"fmt"
"time"
)
func main() {
go func() {
fmt.Println("goroutine")
}() // この丸括弧()の意味がわからなかった
time.Sleep(time.Second)
}
ドキュメント には 関数を呼び出すために必要。 とあった。
最初どういうことかわからなかったけど、スターティングGo言語を読んで、無名関数が利用されているとわかった。
func() {
fmt.Println("goroutine")
}
が無名関数で、この無名関数をgo文で呼び出す、ということで最後に () をつけている…んだと思う。
定義した関数を利用する形に書き直すと以下になる。
package main
import (
"fmt"
"time"
)
func f() {
fmt.Println("goroutine")
}
func main() {
go f()
time.Sleep(time.Second)
}
参考
-
- スターティングGo言語 (CodeZine BOOKS): 松尾愛賀: Books
-
- goステートメント – Goプログラミング言語仕様 – golang.jp
-
- ゴルーチン – 実践Go言語 – golang.jp
go – Why add “()” after closure body in Golang? – Stack Overflow