funcmain() { f, err := os.Create("lines") if err != nil { fmt.Println(err) f.Close() return } d := []string{"Welcome to the world of Go1.", "Go is a compiled language.", "It is easy to learn Go."}
for _, v := range d { fmt.Fprintln(f, v) if err != nil { fmt.Println(err) return } } err = f.Close() if err != nil { fmt.Println(err) return } fmt.Println("file written successfully") }
在上面程序的第 9 行,我们先创建一个名字叫做 lines 的文件。在第 17 行,我们用迭代并使用 for rang 循环这个数组,并使用 Fprintln,Fprintln 函数 将 io.writer 做为参数,并且添加一个新的行,这个正是我们想要的。如果执行成功将打印 file written successfully,并且在当前目录将创建一个 lines 的文件。lines 这个文件的内容如下所示:
1 2 3
Welcome to the world of Go1. Go is a compiled language. It is easy to learn Go.
追加到文件
这一部分我们将追加一行到上节创建的 lines 文件中。我们将追加 File handling is easy 到 lines 这个文件。
funcproduce(data chanint, wg *sync.WaitGroup) { n := rand.Intn(999) data <- n wg.Done() }
funcconsume(data chanint, done chanbool) { f, err := os.Create("concurrent") if err != nil { fmt.Println(err) return } for d := range data { _, err = fmt.Fprintln(f, d) if err != nil { fmt.Println(err) f.Close() done <- false return } } err = f.Close() if err != nil { fmt.Println(err) done <- false return } done <- true }
funcmain() { data := make(chanint) done := make(chanbool) wg := sync.WaitGroup{} for i := 0; i < 100; i++ { wg.Add(1) go produce(data, &wg) } go consume(data, done) gofunc() { wg.Wait() close(data) }() d := <-done if d == true { fmt.Println("File written successfully") } else { fmt.Println("File writing failed") } }