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/OO_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,源码定义如下:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xcode iOS 17.2 not install, Simulator 手动安装

xcode iOS 17.2 not install, Simulator 手动安装 参考文档 xcode又又又升级了&#xff0c;升级完成之后不下载最新的 iOS 17 Simulator就不能编译运行了&#xff0c;只能静静的等他下载。但是离谱的是这个居然没有断点续下&#xff0c;每次都要重新下载&#xff0c;眼睁睁的…

session 和 cookie 有什么区别?

session 和 cookie 有什么区别&#xff1f; Session 和 Cookie 都是用于在Web应用中存储用户信息的机制&#xff0c;但它们有一些关键的区别。 存储位置&#xff1a; Cookie 存储在客户端&#xff0c;以文本形式存储在浏览器中。 Session 存储在服务器端&#xff0c;通常在服…

Onlyoffice本地部署超详细教程(附协作空间2.0新资讯)

陈老老老板&#x1f934; &#x1f9d9;‍♂️本文专栏&#xff1a;生活&#xff08;主要讲一下自己生活相关的内容&#xff09;生活就像海洋,只有意志坚强的人,才能到达彼岸。 &#x1f9d9;‍♂️本文简述&#xff1a;ONLYOFFICE相信大家已经有所了解&#xff0c;本篇讲一下o…

2023全国职业院校技能大赛信息安全管理与评估正式赛(模块三CTF)

全国职业院校技能大赛高等职业教育组信息安全管理与评估 \任务书\ 模块三 网络安全渗透、理论技能与职业素养 极安云科专注技能竞赛&#xff0c;包含网络建设与运维和信息安全管理与评估两大赛项&#xff0c;及各大CTF&#xff0c;基于两大赛项提供全面的系统性培训&#xf…

算法 - 二分搜索法 / 二分法(704)

原理&#xff1a; 利用数组的有序性&#xff0c;每次取查找范围的中间点&#xff0c;缩窄一半的查找空间。比较中间值和目标值的大小&#xff0c;直到找到目标值或者查找区间为空时返回。 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目&…

C++STL的list模拟实现

文章目录 前言 list实现push_back迭代器(重点)普通迭代器const迭代器 inserterase析构函数构造函数拷贝构造赋值 vector和list的区别 前言 要实现STL的list, 首先我们还得看一下list的源码。 我们看到这么一个东西&#xff0c;我们知道C兼容C&#xff0c;可以用struct来创建一…

保姆级:Windows Server 2012上安装.NET Framework 3.5

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Windows》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有…

【python】PDF转长图

PDF转化成长图 步骤&#xff1a; pip install pdf2image下载依赖文件poppler 上代码 # 导入所需的库 from PIL import Image import fitz from pdf2image import convert_from_path# 定义PDF文件路径、保存图像路径和Poppler路径 pdf_file rD:\workspace\python学习笔记.pdf…

什么是产品经理 | 文末赠书

目录 一. 产品经理是什么&#xff1f;二. 产品经理需要具备的技能三. 产品经理的职责四. 产品经理在软件开发过程中如何平衡不同利益方的需求&#xff1f;五. 入门建议六. 发展前景七. 总结&#x1f981;文末福利图书介绍作者简介 一. 产品经理是什么&#xff1f; 产品经理是指…

javascript代码规范

语句规范 所有语句后面需要有";"(*)If、for、do、while 等所有循环体和判断体的执行语句部分都用“{}”括起来&#xff0c;尽量不要省略花括号(不强制,单行时可省略)。禁止在 return 关键字及要返回的表达式之间换行(*)。每行代码应少于 120 个字符&#xff0c;多于…

程序员保密协议(软件开发岗位协议)

保密协议 甲方&#xff1a; 乙方&#xff1a; 鉴于&#xff1a;乙方愿意被聘用到甲方工作&#xff0c;双方经平等协商一致&#xff0c;自愿达成本保密协议。本协议涉及保密和知识产权的内容。 本协议所称任职期间&#xff0c;是指自甲乙双方劳动…

【flink番外篇】3、flink的source(内置、mysql、kafka、redis、clickhouse)介绍及示例(4)- redis -异步读取

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分&#xff0c;比如术语、架构、编程模型、编程指南、基本的…

四、mapbox搭载vue3测试demo(31-40)

demo地址https://bidding-m.gitee.io/mapbox-test/#/ 31、[添加] 热力图图层 32、[添加] 样式聚类 33、[添加] HTML聚类 34、[添加] 点动画效果 35、[添加] marker动

探索SSL证书的应用场景,远不止网站,还有小程序、App Store等

说到SSL证书&#xff0c;我们都知道其是用于实现HTTPS加密保障数据安全的重要工具&#xff0c;在建设网站的时候经常会部署SSL证书。但实际上&#xff0c;SSL证书的应用场景远不止网站&#xff0c;它还被广泛地应用到小程序、App Store、抖音广告、邮件服务器以及各种物联网设备…

用户管理第2节课 -- idea 2023.2 创建表

一、懂得 1.1编码格式是防止乱码的&#xff0c;utf-8是完全够的&#xff0c;那几个基本没差别 网址&#xff1a; 【IDEA——连接MySQL数据库&#xff0c;创建库和表】_idea中数据库-CSDN博客 这些是MySQL数据库中的一些术语&#xff0c;可以简单解释如下&#xff1a; 1、col…

【K8S 系列】认识k8s、k8s架构

一、什么是k8s? Kubernetes 简称 k8s&#xff0c;是支持云原生部署的一个平台&#xff0c;k8s 本质上就是用来简化微服务的开发和部署的&#xff0c;用于自动化部署、扩展和管理容器化应用的开源容器编排技术。对于传统的docker其实也提供了容器编排的技术docker-compose&…

SystemServer 进程启动过程

首语 SystemServer进程主要用于启动系统服务&#xff0c;诸如AMS、WMS、PMS都是由它来创建的。在系统的名称为"system_server"&#xff0c;Android核心服务都是它启动&#xff0c;它是非常重要。 Zygote处理SystemServer进程 在 Zygote启动过程 文章中分析我们知道…

LeetCode算法练习:双指针计算三数之和和四数之和

通过双指针将时间复杂度降一个级别。 public class TOP {//15. 三数之和public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> res new ArrayList<>();int n nums.length;if (n < 3) {return res;}Arrays.sort(nums);//…

2023/12/12作业

思维导图 作业&#xff1a; 成果图 代码 #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { speechernew QTextToSpeech(this); ui->setupUi(this); //一直获取当前时间 idst…

SQL server创建联合索引

CREATE INDEX idx_dim_product_dt_ord ON [dim_product] (dt, ord); 在SQL Server中计算月同比和季度同步的SQL查询可能看起来像这样&#xff1a; ### 月度同比 月度同比是与前一年同一月份的数据进行比较。以下是一个基本的例子&#xff0c;假设我们有一个名为sales的表&…