广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言文件开关及读写操作示例
  • 388
分享到

Go语言文件开关及读写操作示例

2024-04-02 19:04:59 388人浏览 泡泡鱼
摘要

目录⛳️ 实战场景打开关闭文件读取文件bufio 读取文件写文件⛳️ 实战场景 本篇博客为大家再次带来 Go 语言的基础知识,这次要学习的内容是 Go 中的文件操作。 打开关闭文件

⛳️ 实战场景

本篇博客为大家再次带来 Go 语言的基础知识,这次要学习的内容是 Go 中的文件操作。

打开关闭文件

在 Go 中操作文件,首先要做的就是导入 os 模块,该模块中具备相关函数定义。

package main
import (
	"fmt"
	"os"
)
func main() {
	// 打开文件
	file, err := os.Open("./ca.txt")
	if err != nil {
		fmt.Println("文件打开失败", err)
		return
	}
	print(file) // 输出地址 0xc000006028
	// 关闭文件
	file.Close()
}

如果文件打开失败,直接展示错误信息,正确的话,会返回 file 对象的地址。

读取文件

使用 Read 函数读取文件,其定义如下所示:

func (f *File) Read(b [] byte)(n int,err error)

从定义中可以发现,Read 函数会返回 2 个值,第一个是读取的字节数,第二个是当读取报错时,返回错误信息,示例代码如下所示:

package main
import (
	"fmt"
	"io"
	"os"
)
func main() {
	// 打开文件
	file, err := os.Open("./ca.txt")
	if err != nil {
		fmt.Println("打开文件失败,错误信息:", err)
		return
	}
	// 为了防止忘记关闭文件,可使用defer注册文件关闭语句
	defer file.Close()
	// Read方法读取数据
	var tmp = make([]byte, 128)
	// 读取文件
	n, err := file.Read(tmp)
	// 碰到 io.EOF 表示文件读取到末尾
	if err == io.EOF {
		fmt.Println("文件读取完毕")
		return
	}
	if err != nil {
		fmt.Println("读取文件失败,错误信息:", err)
		return
	}
	fmt.Printf("读取了 %d 字节数据\n", n)
	fmt.Println(string(tmp[:n]))
}

输出如下内容:

读取了 24 字节数据
姓名:梦想橡皮擦

读取到 24 个字节,标准的中文占 3 个字节。

但是上述代码最大的问题就是,我们给变量 tmp,即数组 tmp 仅设置了 128 字节,如果待读取的文件超过了改值,例如 txt 内容如下所示:

姓名:梦想橡皮擦1
姓名:梦想橡皮擦2
姓名:梦想橡皮擦3
姓名:梦想橡皮擦4
姓名:梦想橡皮擦5

此时运行代码,就会发现 Read 函数读取到第 128 个字节的时候,就会停止读取,间接导致读取到的数据乱码。

读取了 128 字节数据
姓名:梦想橡皮擦1
姓名:梦想橡皮擦2
姓名:梦想橡皮擦3
姓名:梦想橡皮擦4
姓名:梦想橡��

解决该问题,需要用到 for 循环读取文件数据,代码如下:

package main
import (
	"fmt"
	"io"
	"os"
)
func main() {
	// 打开文件
	file, err := os.Open("./ca.txt")
	if err != nil {
		fmt.Println("打开文件失败,错误信息:", err)
		return
	}
	defer file.Close()
	// 声明一个 content 切片
	var content []byte
	var tmp = make([]byte, 128)
	for {
		n, err := file.Read(tmp)
		if err == io.EOF {
			fmt.Println("文件读取完毕")
			break
		}
		if err != nil {
			fmt.Println("读取文件失败,错误信息:", err)
			return
		}
		// 追加数据
		content = append(content, tmp[:n]...)
	}
	fmt.Println(string(content))
}

上述代码声明了一个动态数组,即切片,解决了读取数据不足的问题。

bufio 读取文件

该函数可以一次读取一行数据,示例代码如下:

func main() {
	file, err := os.Open("./ca.txt")
	if err != nil {
		fmt.Println("打开文件失败,错误信息:", err)
		return
	}
	defer file.Close()
	reader := bufio.NewReader(file)
	for {
		// 逐行读取数据
		line, err := reader.ReadString('\n')
		if err == io.EOF {
			if len(line) != 0 {
				fmt.Println(line)
			}
			fmt.Println("文件读取完毕")
			break
		}
		if err != nil {
			fmt.Println("读取文件失败,错误信息:", err)
			return
		}
		fmt.Print(line)
	}
}

该函数与 python 中的 readline 具备同样的效果,接下来演示一下读取整个文件,代码如下:

package main
import (
	"fmt"
	"io/ioutil"
)
func main() {
	content, err := ioutil.ReadFile("./ca.txt")
	if err != nil {
		fmt.Println("打开文件失败,错误信息:", err)
		return
	}
	fmt.Println(string(content))
}

注意导入模块的时候,直接导入了 io 包中的 ioutil 函数。

写文件

使用 os.OpenFile() 函数可以指定模式打开文件,即可以写入的方式打开文件。

写入文件最常用的函数是 WriteWriteString,示例代码如下所示:

package main
import (
	"fmt"
	"os"
)
func main() {
	file, err := os.OpenFile("ca.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
	if err != nil {
		fmt.Println("打开文件失败,错误信息:", err)
		return
	}
	defer file.Close()
	name := "橡皮擦"
	file.Write([]byte(name))  //写入字节切片
	file.WriteString("梦想橡皮擦") //写入字符串
}

使用该方式写入文件,会覆盖之前的文件内容,查看结果可直接打开目录下的 ca.txt 进行查看。

我们将 os.OpenFile("ca.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) 中的参数进行单独的说明。

第一个参数表示文件名,第二个参数是打开文件的模式,具体模式如下所示:

os.O_WRONLY:只写;

os.O_CREATE:创建文件;

os.O_RDONLY:只读;

os.O_RDWR:读写;

os.O_TRUNC:清空;

os.O_APPEND:追加。

可以看到与 Python 中的文件模式基本一致。

最后一个参数值 0666 表示文件权限(八进制),这与 linux 文件权限数字一致,读 r 等于 4(感谢博友指出该错误),写 w 表示 2,执行 x 等于 1,所以 666 表示的是文件可读,可写。

在文件写入部分,还存在 bufio.NewWriter 整行写入,ioutil.WriteFile 整体写入等内容,可以学习的时候重点查阅一下。

以上就是Go语言文件开关及读写操作示例的详细内容,更多关于Go文件开关读写操作的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言文件开关及读写操作示例

本文链接: https://www.lsjlt.com/news/121005.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言文件开关及读写操作示例
    目录⛳️ 实战场景打开关闭文件读取文件bufio 读取文件写文件⛳️ 实战场景 本篇博客为大家再次带来 Go 语言的基础知识,这次要学习的内容是 Go 中的文件操作。 打开关闭文件 ...
    99+
    2022-11-11
  • Go语言文件读写操作案例详解
    目录基本介绍文件基本操作读操作写操作写操作案例查看文件或目录是否存在拷贝文件基本介绍 文件,对我们并不陌生,文件是数据源(保存数据的地方)的 一种 输入流和输出流 文件在程序中是以流...
    99+
    2022-11-11
  • GO文件创建及读写操作示例详解
    目录三种文件操作比较ioutilioutil.ReadFile读ioutil.WriteFile 写ioutil.ReadAll 读ioutil.ReadDir 查看路径下目录信息i...
    99+
    2022-11-13
  • Go语言zip文件的读写操作
    目录创建 zip 归档文件读取 zip 归档文件Go语言的标准库提供了对几种压缩格式的支持,其中包括 gzip,因此 Go 程序可以无缝地读写 .gz 扩展名的 gzip 压缩文件或...
    99+
    2023-05-14
    Go语言zip读写 go读写ZIP文件
  • Go语言中JSON文件的读写操作
    目录写 JSON 文件读 JSON 文件JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。它基于 ...
    99+
    2023-05-14
    Go语言JSON读写 Go语言读写JSON
  • Go语言中XML文件的读写操作
    目录写 XML 文件读 XML 文件XML(extensible Markup Language)格式被广泛用作一种数据交换格式,并且自成一种文件格式。与上一节介绍的 JSON 相比...
    99+
    2023-05-14
    Go语言XML文件读写 Go语言XML读写
  • Go语言二进制文件的读写操作
    目录写Go语言二进制文件读Go语言二进制文件Go语言的二进制(gob)格式是一个自描述的二进制序列。从其内部表示来看,Go语言的二进制格式由一个 0 块或者更多块的序列组成,其中的每...
    99+
    2023-05-14
    Go语言二进制文件读写 golang 读写二进制文件
  • GO语言ini配置文件的读取操作示例分析
    小编给大家分享一下GO语言ini配置文件的读取操作示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!go适合做什么go是golang的简称,而golang可以...
    99+
    2023-06-15
  • Go语言学习笔记之文件读写操作详解
    目录文件写文件读小结文件操作比较多,分为几篇来写吧。首先是文件的读写,在平时的工程化操作中使用最多。 文件写 样例代码如下 package main import ( "...
    99+
    2022-11-13
  • Go语言zip文件的读写操作方法有哪些
    这篇文章主要介绍“Go语言zip文件的读写操作方法有哪些”,在日常操作中,相信很多人在Go语言zip文件的读写操作方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言zip文件的读写操作方法有哪些...
    99+
    2023-07-05
  • Go语言基础Json序列化反序列化及文件读写示例详解
    目录概述JSON序列化结构体转JSONmap转JSON切片转JSONJSON反序列化JSON转mapJSON转结构体JSON转切片写JSON文件map写入JSON文件切片写入JSON...
    99+
    2022-11-12
  • Go语言中Json序列化反序列化及文件读写的示例分析
    这篇文章主要介绍Go语言中Json序列化反序列化及文件读写的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概述JSON(JavaScript Object Notation,JavaScript对象表示法)是...
    99+
    2023-06-25
  • python 文件读写操作示例源码解读
    目录文件写操作的案例代码解释在Python中,可以使用以下三种方法来读取文件文件写操作的案例 # 打开文件(只写模式) file = open('example.txt', 'w'...
    99+
    2023-03-24
    python 文件读写操作解读 python 文件读写源码解读
  • Go语言中JSON文件的读写操作方法有哪些
    这篇文章主要介绍“Go语言中JSON文件的读写操作方法有哪些”,在日常操作中,相信很多人在Go语言中JSON文件的读写操作方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言中JSON文件的读写操...
    99+
    2023-07-05
  • Go语言中XML文件的读写操作方法有哪些
    这篇文章主要介绍“Go语言中XML文件的读写操作方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言中XML文件的读写操作方法有哪些”文章能帮助大家解决问题。XML(extensible...
    99+
    2023-07-05
  • GO文件创建及读写操作的方法
    本文小编为大家详细介绍“GO文件创建及读写操作的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“GO文件创建及读写操作的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。三种文件操作比较ioutilbufio...
    99+
    2023-06-30
  • R语言开发之CSV文件的读写操作实现
    在R中,我们可以从存储在R环境外部的文件读取数据,还可以将数据写入由操作系统存储和访问的文件。这个csv文件应该存在于当前工作目录中,以方便R可以读取它, 当然,也可以设置自己的目录...
    99+
    2022-11-11
  • Go语言二进制文件的读写操作方法有哪些
    本篇内容介绍了“Go语言二进制文件的读写操作方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Go语言的二进制(gob)格式是一个自描...
    99+
    2023-07-05
  • Go语言使用buffer读取文件的实现示例
    目录使用 bufio 包写入文件使用 bufio 包读取文件buffer 是缓冲器的意思,Go语言要实现缓冲读取需要使用到 bufio 包。bufio 包本身包装了 io.Reade...
    99+
    2023-05-14
    Go buffer读取文件 Go buffer读取
  • GO语言ini配置文件的读取的操作
    iniconf 博主前两天在写一个小的go语言项目,想找一个读取ini格式配置和的三方库,在网上找了一圈感觉都不是很好用, 使用起来非常的奇怪,于是自己写了一版,还有两个接口没...
    99+
    2022-06-07
    ini GO
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作