From 24512d3625c1872f728627aa38b03bb9edc2fac9 Mon Sep 17 00:00:00 2001 From: Acaibrid <95097635+A-caibird@users.noreply.github.com> Date: Thu, 8 Feb 2024 07:13:01 +0800 Subject: [PATCH] Update ch8-05.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 注明:go 1.22版本中for循环,循环变量每次都会重新创建了,而不是只是创建一次,所以闭包这里也是同样的效果 --- ch8/ch8-05.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ch8/ch8-05.md b/ch8/ch8-05.md index b7d572a..0becbcc 100644 --- a/ch8/ch8-05.md +++ b/ch8/ch8-05.md @@ -72,6 +72,8 @@ for _, f := range filenames { ``` 回忆一下之前在5.6.1节中,匿名函数中的循环变量快照问题。上面这个单独的变量f是被所有的匿名函数值所共享,且会被连续的循环迭代所更新的。当新的goroutine开始执行字面函数时,for循环可能已经更新了f并且开始了另一轮的迭代或者(更有可能的)已经结束了整个循环,所以当这些goroutine开始读取f的值时,它们所看到的值已经是slice的最后一个元素了。显式地添加这个参数,我们能够确保使用的f是当go语句执行时的“当前”那个f。 +注明:go 1.22版本中for循环,循环变量每次都会重新创建了,而不是只是创建一次,所以闭包这里也是同样的效果 + 如果我们想要从每一个worker goroutine往主goroutine中返回值时该怎么办呢?当我们调用thumbnail.ImageFile创建文件失败的时候,它会返回一个错误。下一个版本的makeThumbnails会返回其在做拉伸操作时接收到的第一个错误: