名前付き変数はtour of goで紹介されているように、関数の最初で変数宣言したのと同様になる。
この時、nameの変数のスコープはfugafuga()
に対して関数渡しで渡した関数から参照できるため、下記コードは問題なく動く。
package main
import "fmt"
func fugafuga(f func() error, logger func(err error)) error {
f()
return nil
}
func hogehoge() (name string, err error) {
fugafuga(func() error {
name = "test"
return nil
},
func(err error) {
})
return
}
func main() {
n, _ := hogehoge()
fmt.Println(n)
}
出力結果
$ go run main.go
test