golang中闭包的问题
熟悉go语言的开发者都知道,go的闭包是可以记录状态的。当我想用闭包来实现保存某一string切片的值,在想要的地方调用时,有如下代码:
图(1)预想是通过遍历strs,用闭包保存当前value的值来实现需求。而执行的结果却是4个d,而不是我想要的abcd。
闭包并没有按照预期保存当前value的值,而是保存了执行完遍历value的值。闭包执行打印时,用的是最后一次遍历时value的值,所以执行的结果是4个d。
所以在结果这类问题时,通常加入一个临时变量记录value的值。
图(2)在闭包里打印临时变量的值,这样的话结果就是abcd。
网友评论