我写了一个简短的脚本来同时写一个文件。一个 goroutine 应该将字符串写入文件,而其他 goroutine 应该通过通道将消息发送给它。但是,由于某些非常奇怪的原因,创建了文件,但没有通过通道向其中添加任何消息。
package main
import (
"fmt"
"os"
"sync"
)
var wg sync.WaitGroup
var output = make(chan string)
func concurrent(n uint64) {
output <- fmt.Sprint(n)
defer wg.Done()
}
func printOutput() {
f, err := os.OpenFile("output.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666);
if err != nil {
panic(err)
}
defer f.Close()
for msg := range output {
f.WriteString(msg+"\n")
}
}
func main() {
wg.Add(2)
go concurrent(1)
go concurrent(2)
wg.Wait()
close(output)
printOutput()
}
该printOutput()够程被完全执行,如果我试图写的for循环它实际上进入文件之后的东西。所以这让我认为范围输出可能为空
有只小跳蛙
慕码人2483693
蝴蝶刀刀
相关分类