Ich schrieb ein kurzes Skript, um Dateien gleichzeitig zu schreiben. Eine Goroutine soll Strings in eine Datei schreiben, während die anderen die Nachrichten über einen Kanal dorthin senden sollen. Aus irgendeinem wirklich seltsamen Grund wird die Datei erstellt, aber über den Kanal wird keine Nachricht hinzugefügt.Golang: Schreiben gleichzeitig mit Kanälen
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()
}
Die printOutput() goroutine vollständig ausgeführt, wenn ich etwas zu schreiben versucht, nach dem for-Schleife würde es tatsächlich in die Datei. Das führt mich zu der Annahme, dass die Bereichsausgabe Null sein könnte.
Können Sie das Codebeispiel reparieren? Wie geschrieben, würde es nicht laufen. – Snowman
@Snowman Sicher! Gib mir einen Moment, ich werde die Typvariable ändern – Juanvulcano
@Snowman Sollte jetzt viel besser sein, https://play.golang.org/p/Cx6mcUHiSU – Juanvulcano