go写文件

本文详细介绍使用Go语言进行文件写入的四种方法:使用io.WriteString、ioutil.WriteFile、File.Write/String及bufio.NewWriter。通过具体代码示例,对比不同方法的优缺点,为开发者提供实践指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码转载来。个人感觉带缓冲区的 bufio.NewWriter 效率还算可以。

package main

import (
	"bufio" //缓存IO
	"fmt"
	"io"
	"io/ioutil" //io 工具包
	"os"
)

func check(e error) {
	if e != nil {
		panic(e)
	}
}

/**
 * 判断文件是否存在  存在返回 true 不存在返回false
 */
func checkFileIsExist(filename string) bool {
	var exist = true
	if _, err := os.Stat(filename); os.IsNotExist(err) {
		exist = false
	}
	return exist
}

/**
  from: http://www.isharey.com/?p=143
*/

func main() {
	var wireteString = "测试n"
	var filename = "./output1.txt"
	var f *os.File
	var err1 error
	/***************************** 第一种方式: 使用 io.WriteString 写入文件 ***********************************************/
	if checkFileIsExist(filename) { //如果文件存在
		f, err1 = os.OpenFile(filename, os.O_APPEND, 0666) //打开文件
		fmt.Println("文件存在")
	} else {
		f, err1 = os.Create(filename) //创建文件
		fmt.Println("文件不存在")
	}
	check(err1)
	n, err1 := io.WriteString(f, wireteString) //写入文件(字符串)
	check(err1)
	fmt.Printf("写入 %d 个字节n", n)

	/*****************************  第二种方式: 使用 ioutil.WriteFile 写入文件 ***********************************************/
	var d1 = []byte(wireteString)
	err2 := ioutil.WriteFile("./output2.txt", d1, 0666) //写入文件(字节数组)
	check(err2)

	/*****************************  第三种方式:  使用 File(Write,WriteString) 写入文件 ***********************************************/
	f, err3 := os.Create("./output3.txt") //创建文件
	check(err3)
	defer f.Close()
	n2, err3 := f.Write(d1) //写入文件(字节数组)
	check(err3)
	fmt.Printf("写入 %d 个字节n", n2)
	n3, err3 := f.WriteString("writesn") //写入文件(字节数组)
	fmt.Printf("写入 %d 个字节n", n3)
	f.Sync()

	/***************************** 第四种方式:  使用 bufio.NewWriter 写入文件 ***********************************************/
	w := bufio.NewWriter(f) //创建新的 Writer 对象
	n4, err3 := w.WriteString("bufferedn")
	fmt.Printf("写入 %d 个字节n", n4)
	w.Flush()
	f.Close()
}

 

### 使用 Golang 进行文件入操作 在 Golang 中,可以利用 `os` 和 `fmt` 包来实现向文件入数据的功能。以下是具体的操作方法: #### 创建并打开文件 为了能够往文件入内容,首先要创建或打开目标文件。这可以通过调用 `os.OpenFile()` 函数完成,并指定相应的参数以设置访问模式。 ```go file, err := os.OpenFile("example.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { log.Fatalf("failed to open file: %s", err.Error()) } defer file.Close() ``` 这段代码尝试以追加方式 (`O_APPEND`) 打开名为 `"example.txt"` 的文件;如果该文件存在,则会创建它(`O_CREATE`) 。权限位 `0644` 表明新创建的文件具有读/权限给用户自己,而只读权限给予其他所有人[^1]。 #### 向文件入字符串 一旦成功打开了文件句柄,就可以使用标准库中的 `fmt.Fprintf()` 或者 `bufio.NewWriter().WriteString()` 方法来进行实际的数据入工作了。 ```go // Option 1: Using fmt package directly. _, err = fmt.Fprintln(file, "This line will be written into the file.") if err != nil { log.Fatal(err) } // Option 2: Use buffered writer which may improve performance when writing large amounts of data. writer := bufio.NewWriter(file) _, err = writer.WriteString("Another way to add content.\n") if err != nil { log.Fatal(err) } else if flushErr := writer.Flush(); flushErr != nil { // Don't forget to call Flush() after done using buffer writers. log.Fatal(flushErr) } ``` 上述两种方案都可以有效地把文本信息保存到磁盘上的文件内。对于较大的数据集来说,推荐采用带缓冲区的方式(即第二种),因为这样可以在一定程度上减少 I/O 操作次数从而提高效率[^2]。 #### 关闭文件资源 无论何时完成了所有的输入输出活动之后都应当记得关闭已经打开过的文件对象,以便释放占用着的相关系统资源。通常情况下,在函数结束前通过 defer 语句安排好这一清理动作是比较好的做法。 ```go defer file.Close() ``` 以上就是关于怎样运用 Go 语言执行基本的文件入任务的一个简单介绍。当然还有更多高级特性等待探索学习!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值