代码如下:
func main() { var wg sync.WaitGroup wg.Add(5) for i := 0; i < 5; i++ { go func() { fmt.Println(i) wg.Done() }() } wg.Wait()}
正确示例:将 i 作为参数传入即可,这样每个 goroutine 拿到的都是拷贝后的数据
func main() { var wg sync.WaitGroup wg.Add(5) for i := 0; i < 5; i++ { go func(i int) { fmt.Println(i) wg.Done() }(i) } wg.Wait()}
package main
import "os"
func main() {
ParallelWrite([]byte("xxx"))
}
// ParallelWrite writes data to file1 and file2, returns the errors.
func ParallelWrite(data []byte) chan error {
res := make(chan error, 2)
// 创建/写入第一个文件
f1, err := os.Create("/tmp/file1")
if err != nil {
res <- er
} else {
go func() {
// 下面的这个函数在执行时,是使用err进行判断,但是err的变量是个共享的变量
_, err = f1.Write(data)
res <- er
f1.Close()
}()
}
// 创建写入第二个文件n
f2, err := os.Create("/tmp/file2")
if err != nil {
res <- er
} else {
go func() {
_, err = f2.Write(data)
res <- er
f2.Close()
}()
}
return res
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。