我有以下代碼的一部分,它不會將任何數據寫入文件log.txt。我不明白爲什麼?它不應該是同步問題,因爲我在啓動任何去程序之前關閉文件並在每個程序內部打開/關閉文件。Golang:爲什麼下面的代碼片段不寫入文件?
package main
import (
"fmt"
"runtime"
"os"
"time"
)
func main() {
runtime.GOMAXPROCS(4)
f, _ := os.Create("./log.txt")
f.Close()
logCh := make(chan string, 50)
go func() {
for {
msg, ok := <- logCh
if ok {
logTime := time.Now().Format(time.RFC3339)
f, _ := os.OpenFile("./log.txt", os.O_APPEND, os.ModeAppend)
f.WriteString(logTime + " - " + msg)
f.Close()
} else {
break
}
}
}()
for i:=1; i < 10;i++ {
for j:=1; j<10;j++ {
go func(i, j int) {
msg := fmt.Sprintf("%d + %d = %d\n", i, j, i+j)
logCh <- msg
fmt.Print(msg)
}(i, j)
}
}
//fmt.Scanln()
}
是的,我做到了。在創建完成後沒有儘快關閉,並在每個goroutine中使用相同的fileDescriptior來寫入文件。是的 - 在這種情況下,它會在沒有WaitGroup的情況下運行。但是爲什麼它在最初的例子中不起作用 - 在任何通道或goroutine啓動之前,文件都會創建並關閉。我打開/關閉每個goroutine中的文件。但文件仍然是空的。爲什麼? – PARUS
緩衝通道是非阻塞的。你的main()退出速度更快。 – favoretti