Go语言文件操作:文件读写案例以及相关细节介绍

在这里插入图片描述

文章目录

  • 介绍
    • 一、打开文件
      • 1.1 以只读的方式打开文件
      • 1.2 自定义的方式打开文件
    • 二、文件读写代码案例
      • 2.1 从磁盘读取数据
      • 2.2 向磁盘写数据

介绍

对文件进行操作时,其中最基本的操作就是"读写"。本文将介绍Go语言中文件读写的案例和相关细节。在Go语言中,文件的读写操作与Java中的IO流类似。在Go语言中,文件的IO操作主要使用了os包。可以在中文API文档中查找更多关于os包的信息:https://studygolang.com/pkgdoc,下面是文件读写方法截图:
在这里插入图片描述

一、打开文件

要对一个文件进行操作,首先肯定是需要先打开,这和平时用Windows界面操作文件是同一个道理,在Java语言中,我们可能会通过输入流的方式打开一个文件,如下所示:

FileInputStream fileInputStream = new FileInputStream("doc/user.txt");

那么在Go中是如何打开一个文件的呢?在Go中有两种方式打开文件,相关介绍如下。

1.1 以只读的方式打开文件

func Open(name string) (*File, error)

从上面方法定义我们知道它只接收一个参数,就是文件路径名,这种打开方式默认情况是只读的,也就是不能向文件写内容,因为默认情况下文件标志O_RDONLY(关于文件标志,后面介绍)源码如下:

在这里插入图片描述
下面是调用方法代码,返回信息是一个file结构体error的异常。

file, err := os.Open("doc/name.txt")

下面是一个基本的文件打开操作代码:

file, err := os.Open("doc/name.txt")
if err != nil {
    fmt.Println("文件打开失败!", err)
}
defer file.Close()  //函数运行结束前关闭文件流
name := file.Name() //获取文件名
fmt.Println(name)

1.2 自定义的方式打开文件

func OpenFile(name string, flag int, perm FileMode) (*File, error)

name:文件路径
flag:文件打开类型
perm:文件模式,只在Linux下生效

这种打开文件的方式,是可以按照自己的需求进行自定义的,最主要的参数是文件名(name)文件标志(flag),因为perm只能在Linux操作系统才生效,如果没有需求,随便填就可以,下面是支持文件标志常量:

const (
    O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
    O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
    O_RDWR   int = syscall.O_RDWR   // 读写模式打开文件
    O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
    O_CREATE int = syscall.O_CREAT  // 如果不存在将创建一个新文件
    O_EXCL   int = syscall.O_EXCL   // 和O_CREATE配合使用,文件必须不存在
    O_SYNC   int = syscall.O_SYNC   // 打开文件用于同步I/O
    O_TRUNC  int = syscall.O_TRUNC  // 如果可能,打开时清空文件
)

上面的这些文件打开标志常量是可以通过管道符号:“|”进行联合搭配使用的,是与(and)的关系,例如我们可以通过O_WRONLY|O_APPEND来达到在写数据时候,在文件进行附加,代码如下:

file, err := os.OpenFile("doc/user.txt", os.O_WRONLY|os.O_APPEND, 0777)

二、文件读写代码案例

下面简单介绍一下文件的读写案例,关于更多的技术细节在后面的文章中进行介绍。

2.1 从磁盘读取数据

func main() {
	file, err := os.Open("doc/user.txt") // 打开文件
	if err != nil { // 如果打开文件失败
		fmt.Printf("文件打开失败:%v", err)
		return
	}
	reader := bufio.NewReader(file) // 创建一个文件读取器
	for { // 循环读取文件内容
		value, err := reader.ReadString('\n') // 读取一行内容
		if err == io.EOF { // 如果读到文件末尾
			break // 退出循环
		}
		fmt.Println(value) // 打印读取的内容
	}
}

2.2 向磁盘写数据

下面是一个向磁盘写数据的案例,通过bufio.NewWriter创建一个缓冲区,然后向里面写数据。

func main() {
    file, err := os.OpenFile("doc/user.txt", os.O_WRONLY|os.O_CREATE, 0777) // 打开或创建文件
    if err != nil { // 如果文件打开或创建失败
        fmt.Printf("文件打开失败:%v", err)
        return
    }
    defer file.Close() // 在函数返回前关闭文件,保证文件关闭操作能被执行

    writer := bufio.NewWriter(file) // 新建一个缓冲区

    for i := 0; i < 5; i++ {
        writer.WriteString("hello world\n") // 将内容写入缓存
        writer.Flush() // 写一次,刷一次盘(将缓存中的数据刷新到磁盘)
    }
}

关于缓冲区默认大小是4096,源码定义如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/239973.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pytorch——房价预测

1、首先对数据进行读取和预处理 2、读取数据后&#xff0c;对x数据进行标准化处理&#xff0c;以便于后续训练的稳定性&#xff0c;并转换为tensor格式 3、接下来设置训练参数和模型 这里采用回归模型&#xff0c;既yx*weight1bias1&#xff0c;设置的学习率为0.0006&#x…

如何将LLMs封装成应用并在本地运行

最近我一直在致力于Ollama的工作&#xff0c;因此我花了很多时间思考如何在本地系统上运行大型语言模型&#xff08;LLMs&#xff09;以及如何将它们打包成应用程序。对于使用LLMs的大多数桌面应用程序而言&#xff0c;通常的体验要么是插入OpenAI API密钥&#xff0c;要么是从…

freemarker+Aspose.word实现模板生成word并转成pdf

需求&#xff1a;动态生成pdf指定模板 实现途径&#xff1a;通过freemarker模板&#xff0c;导出word文档&#xff0c;同时可将word转为pdf。 技术选择思路 思路一&#xff1a;直接导出pdf 使用itext模板导出pdf 适用范围 业务生成的 pdf 是具有固定格式或者模板的文字及其…

【Hadoop_05】NN、2NN以及DataNode的工作机制

1、NameNode和SecondaryNameNode1.1 NN和2NN工作机制1.2 Fsimage和Edits解析1.3 CheckPoint时间设置 2、DataNode2.1 DataNode工作机制2.2 数据完整性2.3 掉线时限参数设置 1、NameNode和SecondaryNameNode 1.1 NN和2NN工作机制 思考&#xff1a;NameNode中的元数据是存储在哪…

HarmonyOS鸿蒙应用开发——数据持久化Preferences

文章目录 数据持久化简述基本使用与封装测试用例参考 数据持久化简述 数据持久化就是将内存数据通过文件或者数据库的方式保存到设备中。HarmonyOS提供两两种持久化方案&#xff1a; Preferences&#xff1a;主要用于保存一些配置信息&#xff0c;是通过文本的形式存储的&…

【启扬方案】启扬储能管理平板助力储能电站实现智能且高效化运行

在储能领域&#xff0c;储能电站扮演着重要角色&#xff0c;储能电站技术的应用贯穿于电力系统发电、输电、配电、用电的各个环节。实现电力系统削峰填谷、可再生能源发电波动平滑与跟踪计划处理、高效系统调频&#xff0c;增加供电的可靠性。 但随着储能电⼒系统建设发展得越来…

实时云渲染技术下的虚拟汽车展厅 为什么越来越受青睐?

虚拟汽车展厅正成为各大车企展示和推广汽车的热门选择。这一趋势背后&#xff0c;反映了汽车行业对数字化转型和消费者需求变化的灵敏应对。 虚拟汽车展厅通常需要大量的3D建模和渲染技术来展示汽车的逼真效果。而点量实时云渲染技术可以通过云端计算来实现实时渲染&#xff0…

【Matlab】如何将二阶线性微分方程进行Laplace变换得到传递函数

二阶线性微分方程进行Laplace变换 前言正文代码实现 前言 二阶线性微分方程: 一个二阶线性微分方程通常可以写成如下形式: y ′ ′ ( t ) p ( t ) y ′ ( t ) q ( t ) y ( t ) f ( t ) y^{\prime \prime}(t)p(t) y^{\prime}(t)q(t) y(t)f(t) y′′(t)p(t)y′(t)q(t)y(t)f(…

CS110L 系统编程安全 笔记

用户向程序输入数据&#xff0c;程序分析数据&#xff0c;但是当用户的输入大于缓冲区长度时&#xff0c;数据会溢出&#xff0c;覆盖掉内存中其他内容&#xff0c;比如函数返回地址&#xff0c;从而可能导致程序返回到错误的地址执行了不安全的程序&#xff08;远程代码执行&a…

selenium自动化(中)

显式等待与隐式等待 简介 在实际工作中等待机制可以保证代码的稳定性&#xff0c;保证代码不会受网速、电脑性能等条件的约束。 等待就是当运行代码时&#xff0c;如果页面的渲染速度跟不上代码的运行速度&#xff0c;就需要人为的去限制代码执行的速度。 在做 Web 自动化时…

基于单片机的定时插座在智能家居中的应用

近年来&#xff0c;随着科学技术的发展迅速&#xff0c;人们对智能化的要求越来越高。越来越多的智能化产品进入千家万户&#xff0c;如电脑电视、扫地机器人、智能空气净化器等。这些家居电器和电子产品大都需要连接电源&#xff0c;为满足多种用电器的正常使用&#xff0c;延…

beebox靶场A3 low级别 xss通关教程(二)

六&#xff1a;xss get型 eval 通过观察我们可以发现url地址中存在一个date函数 那我们可以试一下把后面的date()函数去掉&#xff0c;直接写入一个alert(555) 发现直接弹出一个框&#xff0c;证明有xss漏洞 七&#xff1a;xss href 直接进入页面会看到是get方法&#xff0c…

计网 - LVS 是如何直接基于 IP 层进行负载平衡调度

文章目录 模型LVS的工作机制初探LVS的负载均衡机制初探 模型 大致来说&#xff0c;可以这么理解&#xff08;只是帮助我们理解&#xff0c;实际上肯定会有点出入&#xff09;&#xff0c;对于我们的 PC 机来说&#xff0c;物理层可以看成网卡&#xff0c;数据链路层可以看成网卡…

计算机毕业设计 基于SpringBoot的乡村政务办公系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Appium 自动化自学篇 —— 初识Appium自动化!

Appium 简介 随着移动终端的普及&#xff0c;手机应用越来越多&#xff0c;也越来越重要。而作为测试 的我们也要与时俱进&#xff0c;努力学习手机 App 的相关测试&#xff0c;文章将介绍手机自动化测试框架 Appium 。 那究竟什么是 Appium 呢? 接下来我们一起来学习PythonS…

CentOS 7 离线安装MySQL审计插件

命令行 cd /data/toolssz mariadb-10.2.38-linux-x86_64.tar.gztar -zxvf mariadb-10.2.38-linux-x86_64.tar.gzinstall lib/plugin/server_audit.so /usr/lib64/mysql/plugin/mysql -uroot -prootinstall plugin server_audit SONAME server_audit.so;show variables like &q…

【Apollo】ubuntu20.04源码安装apollo8.0

官方源码安装教程 https://blog.csdn.net/weixin_45929038/article/details/120113008 安装NVIDIA GPU驱动 Apollo 8.0 的一些模块的编译和运行需要依赖 NVIDIA GPU 环境&#xff08;例如感知模块&#xff09;&#xff0c;如果有编译和运行这类模块的需求&#xff0c;则需要安…

Redis生产实战-热key、大key解决方案、数据库与缓存最终一致性解决方案

生产环境中热 key 处理 热 key 问题就是某一瞬间可能某条内容特别火爆&#xff0c;大量的请求去访问这个数据&#xff0c;那么这样的 key 就是热 key&#xff0c;往往这样的 key 也是存储在了一个 redis 节点中&#xff0c;对该节点压力很大 那么对于热 key 的处理就是通过热…

深入探索 Spring Boot:简化开发,加速部署的全方位利器

目录 导言 1. 自动配置&#xff08;Auto-Configuration&#xff09; 2. 起步依赖&#xff08;Starter Dependencies&#xff09; 3. 嵌入式 Web 服务器 4. Actuator 5. 外部化配置 6. 简化的安全性配置 7. Spring Boot CLI 8. Spring Boot DevTools 导言 在当今软件开…

【华为数据之道学习笔记】4-2信息架构原则:建立企业层面的共同行为准则

信息架构承载了企业如何管理数据资产的方法&#xff0c;需要从整个企业 层面制订统一的原则&#xff0c;这些原则不仅是对数据专业人员的要求&#xff0c;也是对业务的要求&#xff0c;因为业务才是真正的数据Owner。所以&#xff0c;公司所有业务部门都应该共同遵从信息架构原…