以下のようなコードの中にある 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

bannerAds