を取得反映golangは、閉鎖関数ポインタ
package main
import (
"fmt"
"reflect"
)
func main() {
factory := func (name string) func(){
return func(){
fmt.Println(name)
}
}
f1 := factory("f1")
f2 := factory("f2")
pf1 := reflect.ValueOf(f1)
pf2 := reflect.ValueOf(f2)
fmt.Println(pf1.Pointer(), pf2.Pointer())
fmt.Println(pf1.Pointer() == pf2.Pointer())
f1()
f2()
}
に
結果コードを確認してください:4199328 4199328
true
f1
f2
なぜ閉鎖機能の同じアドレスを取得します! または一意のアドレスを取得する方法へ!
この質問と回答は非常に興味深いものでした。私はhttp://stackoverflow.com/q/9643205/1103700同様の質問(しかし、閉鎖についてではない)と答え啓発を発見した。 Goデザイナーは、機能やクロージャの比較を望んでいないように思えました。だから、Goデザイナーが私が期待していたのと同じように、人々が思いついたいくつかの回避策があります。 – WeakPointer