У меня есть следующая часть кода, которая не записывает никаких данных в файл log.txt. Я не понимаю, почему? Это не должно быть проблемой синхронизации, потому что я закрываю файл перед запуском любой процедуры go и открываю/закрываю файл внутри каждой процедуры.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()
}
Да, я сделал это было. Не делайте близких сразу после создания и используйте один и тот же fileDescriptior внутри каждого goroutine для записи в файлах. Да - в этом случае он будет работать без WaitGroup. Но почему это не работает в исходном примере - файлы создаются и закрываются, прежде чем запускается какой-либо канал или goroutine. И я открываю/закрываю файлы внутри каждого goroutine. Но файлы все еще пусты. Зачем ? – PARUS
Буферизованные каналы не блокируются. Ваш основной() выйдет быстрее. – favoretti