ZetCode

Go 写入文件

最后修改时间 2024 年 4 月 11 日

本文介绍如何在 Golang 中写入文件。请参阅 Go 读取文件,了解如何在 Go 中读取文件。

在 Go 中写入文件,我们使用 osioutilfmt 包。

func (f *File) WriteString(s string) (n int, err error)

我们使用的函数通常会返回写入的字节数以及可能发生的错误。

Go 使用 File.WriteString 写入文件

File.WriteString 函数将字符串内容写入文件。

write_string.go
package main

import (
    "fmt"
    "log"
    "os"
)

func main() {

    f, err := os.Create("data.txt")

    if err != nil {
        log.Fatal(err)
    }

    defer f.Close()

    _, err2 := f.WriteString("old falcon\n")

    if err2 != nil {
        log.Fatal(err2)
    }

    fmt.Println("done")
}

该示例将一个字符串写入文本文件。

f, err := os.Create("data.txt")

os.Create 创建或截断指定的文件。如果文件已存在,则将其截断。

_, err2 := f.WriteString("old falcon\n")

使用 WriteString 将字符串写入创建的文件。

$ go run write_string.go
done
$ cat data.txt
old falcon

我们运行程序并显示创建的文件的内容。

Go 使用 File.Write/File.WriteAt 写入文件

File.Write 向文件写入 n 个字节。File.WriteAt 从指定字节偏移量开始向文件写入 n 个字节。

write_bytes.go
package main

import (
    "fmt"
    "log"
    "os"
)

func main() {

    f, err := os.Create("data.txt")

    if err != nil {
        log.Fatal(err)
    }

    defer f.Close()

    val := "old falcon"
    data := []byte(val)

    _, err2 := f.Write(data)

    if err2 != nil {
        log.Fatal(err2)
    }

    val2 := " and red fox\n"
    data2 := []byte(val2)

    var idx int64 = int64(len(data))

    _, err3 := f.WriteAt(data2, idx)

    if err3 != nil {
        log.Fatal(err3)
    }

    fmt.Println("done")
}

首先,我们使用 File.Write 将“old falcon”写入文件,然后我们使用 File.WriteAt 将“ and red fox”写在后面。

val := "old falcon"
data := []byte(val)

我们将字符串转换为字节。

_, err2 := f.Write(data)

我们使用 Write 写入字节。

var idx int64 = int64(len(data))

我们计算先前写入字符串的长度。

_, err3 := f.WriteAt(data2, idx)

我们使用 WriteAt 写入字符串和指定的索引。

$ go run write_bytes.go
done
$ cat data.txt
old falcon and red fox

我们运行程序并检查文件。

Go 使用 ioutil.WriteFile 写入文件

outil.WriteFile 将数据写入指定文件。这是一个更高级别的便捷函数。文件的打开和关闭由我们处理。

write_file.go
package main

import (
    "fmt"
    "io/ioutil"
    "log"
)

func main() {

    val := "old falcon\n"
    data := []byte(val)

    err := ioutil.WriteFile("data.txt", data, 0)

    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("done")
}

该示例使用 ioutil.WriteFile 将字符串写入文件。

Go 写入切片到文件

下面的示例将一个单词切片写入文件。

write_slice.go
package main

import (
    "fmt"
    "log"
    "os"
)

func main() {
    f, err := os.Create("data.txt")

    if err != nil {
        log.Fatal(err)
    }

    defer f.Close()

    words := []string{"sky", "falcon", "rock", "hawk"}

    for _, word := range words {

        _, err := f.WriteString(word + "\n")

        if err != nil {
            log.Fatal(err)
        }
    }

    fmt.Println("done")
}

我们定义一个单词切片。在 for 循环中,我们遍历切片并将所有单词写入文件。

$ go run write_slice.go
done
$ cat data.txt
sky
falcon
rock
hawk

我们运行程序并显示创建的文件的内容。

Go 写入格式化字符串

fmt.Fprintln 使用其操作数的默认格式格式化字符串并将其写入写入器。操作数之间始终添加空格,并在末尾附加换行符。

write_formatted.go
package main

import (
    "fmt"
    "log"
    "os"
)

func main() {

    f, err := os.Create("data.txt")

    if err != nil {
        log.Fatal(err)
    }

    defer f.Close()

    const name, age = "Johne Doe", 34

    n, err := fmt.Fprintln(f, name, "is", age, "years old.")

    if err != nil {

        log.Fatal(err)
    }

    fmt.Println(n, "bytes written")
    fmt.Println("done")
}

在代码示例中,我们有两个变量:nameage。我们从这些变量构建一个字符串并将其写入创建的文件。我们还打印了写入的字节数。

$ go run write_formatted.go
27 bytes written
done
$ cat data.txt
Johne Doe is 34 years old.

我们运行程序并显示创建的文件的内容。

来源

Go os 包 - 参考

本文介绍了在 Go 中写入文件。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 Go 教程