我在编码时写了一个错误,当我解决这个问题时,我对代码的输出感到困惑,代码如下所示:
type (
Handler func(name string) error
)
func mh(h Handler) Handler {
return func(name string) error {
fmt.Printf("return mh,name=%s,h=%x\n", name, h)
return h(name)
}
}
func main() {
var h Handler
h = func(name string) error {
fmt.Printf("********************************\n")
fmt.Printf("before func h=%x\n", h)
h = mh(h)
fmt.Printf("after func h=%x\n", h)
return h(name)
}
fmt.Printf("main h=%x\n", h)
h("main")
}
运行代码,输出为:
main h=486d40
********************************
before func h=486d40
after func h=486c00
return mh,name=main,h=486d40
********************************
before func h=486c00
after func h=486c00
return mh,name=main,h=486c00
return mh,name=main,h=486d40
********************************
before func h=486c00
after func h=486c00
return mh,name=main,h=486c00
return mh,name=main,h=486c00
return mh,name=main,h=486d40
.......
我不明白调用堆栈。我认为输出应该是循环“mh”。
三国纷争
暮色呼如
相关分类