iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >GoLangOS包以及File类型详细讲解
  • 604
分享到

GoLangOS包以及File类型详细讲解

Goos包的FileGoLangos包 2023-03-19 18:03:00 604人浏览 薄情痞子
摘要

目录一、OS包的作用二、os.File类型实现了哪些io包的接口三、创建os.File类型的指针类型3.1 os.Create3.2 os.NewFile3.3 os.Open3.4

一、OS包的作用

os包中的api主要可以帮助我们使用操作系统中的文件系统、权限系统、环境变量、系统进程,以及系统信号。

对于类Unix的操作系统,其中的一切都可以被看作文件。因此可以利用os.File类型操作的东西很多。

本篇文章把os.File 类型应用于常规的文件。

二、os.File类型实现了哪些io包的接口

os.File拥有的都是指针方法,所以除了空接口以外,它本身没有实现任何接口。而它的指针类型则实现了很多io代码包中的接口。

  • *os.File实现了io包中三个最核心的简单接口:io.Readerio.Writerio.Closer
  • *os.File还实现了另外三个简单接口:io.ReaderAtio.Seekerio.WriterAt
  • 由于*os.File实现了上面六个简单接口,所以它顺便实现了io包中9个扩展接口中的7个:io.ReadWriterio.ReadCloserio.ReadSeekerio.ReadWriteCloserio.ReadWriteSeekerio.WriteCloserio.WriteSeeker

由于·*os.File没有实现简单接口io.ByteReaderio.RuneReader,所以它没有实现它没有实现作为它两者的扩展接口:io.ByteScannerio.RuneScanner

所以,os.File可以读写文件,并读取和设定下一次读写的起始索引位置。还可以对文件进行关闭。但是,并不能专门地读取文件的下一个字节,或者写一个Unicode字符,也不能进行任何的读回退操作。

三、创建os.File类型的指针类型

在os包中,有这样几个函数:Create、NewFile、Open和OpenFile。

3.1 os.Create

os.Create函数用于根据指定的路径创建一个新的文件。

使用这个函数创建的文件,对于操作系统中的所有用户来说,都是可以读和写的。

  • 如果在我们给予os.Create函数的路径之上,已经存在一个文件,那么该函数会清空现有文件中的全部内容,然后再把它作为第一个结果值返回;
  • 如果给定的路径的某一级父目录并不存在,该函数就会返回一个*os.PathError类型的错误值,以表示“不存在的文件或目录“。

3.2 os.NewFile

该函数在被调用的时候,需要接受一个代表文件描述符的uintptr类型的值,以及一个用于表示文件名的字符值。

  • 如果给定的文件描述符不是有效的,那么函数将返回nil。否则,它将会返回一个代表了相应文件的File值;

这个函数的功能并不是创建一个新的文件,而是依据一个已经存在的文件描述符,来新建一个包装了该文件的File值。

3.3 os.Open

os.Open函数会打开一个文件并返回包装了该文件的File值。然而,该函数只能以只读模式打开文件。

换句话说,我们只能从该函数返回的File值中读取内容,而不能向它写入任何内容。

如果调用它的任何一个写入方法,都会得到一个表示“坏的文件描述符”的错误值。

os.File类型有一个指针方法Fd,它在被调用之后将会返回一个uintptr 类型的值,这个值就代表了当前的File值所持有的那个文件描述符。

3.4 os.OpenFile

os.OpenFile其实是os.Openos.Create函数的底层支持,它最为灵活。

这个函数有3个参数:

  • name:文件路径;
  • flag:需要施加在文件描述符之上的模式;比如,只读模式(由os.O_RDONLY)。操作模式
  • perm:代表的也是模式,类型是os.FileMode,是一个基于uint32类型的再定义类型。权限模式。

操作模式限定了文件的方式,权限模式控制文件的访问权限。

四、os.File值的操作模式有哪些

针对File值的操作模式主要有:只读模式、只写模式和读写模式。

  • 只读模式:os.O_RDONLY
  • 只写模式:os.O_WRONLY
  • 读写模式:os.O_RDWR

更多的操作模式:

  • os.O_APPEDN :写内容是,追加在现有内容的后面;
  • os.O_CREATE :当给定路径上的文件不存在时,创建一个新文件;
  • os.O_EXCL:需要和os.O_CREATE一同使用,表示给定的路径上不能有存在的文件。
  • os.O_SYNC :在打开文件之上实施同步I/O。它会保证读写的内容总会与硬盘上的数据保持同步。
  • os.O_TRUNC:如果文件已存在,并且是常规的文件,那么就先清空其中已存在的任何内容。

多个操作模式是通过按位操作符|组合起来的。

func Create(name string) (*File, error) {
	return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
}
func Open(name string) (*File, error) {
	return OpenFile(name, O_RDONLY, 0)
}

五、os.OpenFile的第三个表示模式的参数

os.OpenFile函数的第三个参数perm代表的是权限模式,它的类型是os.FileMode。实际上,os.FileMode能够代表的不仅是权限模式,还可以代表文件模式(也可以称为文件种类)。

os.FileMode是基于uint32类型的再定义类型,包含23个比特位,在这23个比特位,每个比特位都有特定的含义。

  • 如果在最高比特位的二进制数是1,该文件模式就等同于os.ModeDir,也就是说相应的文件是一个目录。
  • 如果在第26位比特位的二进制数是1,该文件模式就等同于os.ModeNamedPipe,也就是说该文件是一个命名管道。

os.FileMode只有最低9个比特位才用于表示文件的权限。

os.FileMode类型的值与os.ModePerm常量(值为0777)做按位与操作,得到的值就表示对应的权限模式。

这9个比特位,3个为一组,共3组。从高到低,分别表示:文件所有者(创建文件的那个用户)、文件所属的用户组、用户对该文件的访问权限。而对于每个组,其中的3个比特位从高到低分别表示:读权限、写权限、执行权限。

某个比特位上是1,表示相应的权限开启,否则,就表示相应的权限关闭。

  • 八进制整数0777就表示:操作系统中的所有用户都对当前的文件有读、写和执行的权限;
  • 而八进制整数0666则表示:所有用户都对当前文件有读和写的权限,但都没有执行的权限。

但要注意,只有在新建文件的时候,这里的第三个参数值才是有效的。在其他情况下,即使我们设置了此参数,也不会对目标文件产生任何的影响。

到此这篇关于golang OS包以及File类型详细讲解的文章就介绍到这了,更多相关Go os包的File内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: GoLangOS包以及File类型详细讲解

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

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

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

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

下载Word文档
猜你喜欢
  • GoLangOS包以及File类型详细讲解
    目录一、OS包的作用二、os.File类型实现了哪些io包的接口三、创建os.File类型的指针类型3.1 os.Create3.2 os.NewFile3.3 os.Open3.4...
    99+
    2023-03-19
    Go os包的File GoLang os包
  • C++详细讲解引用类型
    目录一、C++中的引用类型二、如何使用C++中的引用类型一、C++中的引用类型 在以严蔚敏老师的《数据结构》为代表的诸多数据结构的书中,都出现了C++引用这一用法,所以在学习数据结构...
    99+
    2024-04-02
  • GoLangunsafe包详细讲解
    目录1.前言2.指针类型转换3.指针运算4.获取大小和偏移5.关于string1.前言 开发中,[]byte类型和string类型需要互相转换的场景并不少见,直接的想法是像下面这样进...
    99+
    2024-04-02
  • Java详细讲解包的作用以及修饰符的介绍
    目录1.包1.包的三大作用2.包的基本语法3.包的本质4.包的命名规则5.包的命名规范6.常用的包7.注意事项和使用细节2.访问修饰符1.4种访问修饰符的访问范围2.使用注意事项3....
    99+
    2024-04-02
  • Java中File类方法详解以及实践
    目录File类概述File类常用构造器File类常用方法常用方法示例createTempFile临时文件创建示例FilenameFilter文件过滤器示例总结File类概述 File...
    99+
    2024-04-02
  • 详细讲解Swift中的类型占位符
    Swift 的类型推断能力从一开始就是语言的核心部分,它极大地减少了我们在声明有默认值的变量和属性时手动指定类型的工作。例如,表达式var number = 7不需要包含任何类型注释...
    99+
    2024-04-02
  • Golang表示枚举类型的详细讲解
    枚举,是一种重要的数据类型,由一组键值对组成,通常用来在编程语言中充当常量的标识符。在主流行编程语言如 c、 java 等,都有原生支持。在 go 中,大家却找不到 enum 或者...
    99+
    2024-04-02
  • C++超详细讲解强制类型转换
    目录1 C 强制类型转换2 C++ 强制类型转转1 C 强制类型转换 C 方式的强制类型转换的用法如下代码所示: (Type)(Expression) Type:需要转换成的类型Ex...
    99+
    2024-04-02
  • Java-File类详解(一篇讲透)
    File类的使用 前言一、File类概述二、File类的使用1. 绝对路径 vs 相对路径2. 路径分隔符3. 静态成员变量3. 常用构造器4. 常用方法4.1 获取功能4.2 重命名功能4.3 判断功能4.4 创建功能4.5 删除...
    99+
    2023-08-17
    java 开发语言 intellij-idea eclipse jar
  • 详细讲解Golang请求包
    Golang是一门越来越受欢迎的编程语言,它在服务器端的应用领域日益增多。开发者们都知道,网络请求在服务器端开发中是必不可少的部分,那么Golang中怎么进行网络请求呢?本文将详细讲解Golang请求包,让大家更好地掌握Golang网络请求...
    99+
    2023-05-14
  • TypeScript条件类型与内置条件类型超详细讲解
    目录一、TS中条件类型是什么二、条件类型1.在类型中添加条件分支2.条件类型的分发3.分布式的条件分发4.更多示例三、内置条件类型1.Exclude2.Extract3.NonNul...
    99+
    2023-03-09
    TypeScript条件类型 TypeScript内置条件类型
  • GoLang OS包及File类型源码分析
    这篇文章主要介绍“GoLang OS包及File类型源码分析”,在日常操作中,相信很多人在GoLang OS包及File类型源码分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”GoLan...
    99+
    2023-07-05
  • C++模板非类型形参的详细讲解
    前言 关于模板的非类型形参,网上有很多内容,C++primer只有大概一页的阐述,但是都不够清晰详细。下面我尽可能从自己的角度去给大家描述一下非类型形参的相关细节。如果想进一步理解非...
    99+
    2024-04-02
  • Mysql数据类型与CRUD操作详细讲解
    目录基本数据类型数据库命令建表与约束建表约束基本数据操作(CRUD)基本数据类型 整数:可选择unsigned修饰 intyint 8位 (-128 - 127) smallint 16位 (-32768 - 32767...
    99+
    2024-04-02
  • VueMVVM模型超详细讲解
    目录理解MVVM模型什么是 MVVM 模型MVVM的组成部分Vue中的实现MVVM模型在Vue中的应用理解MVVM模型 我们知道每一个 Vue 应用都是从创建一个新的实例开始的,根据...
    99+
    2022-11-13
    Vue MVVM模型 Vue MVVM框架
  • C++超详细讲解泛型
    目录1.了解泛型编程2.函数模板2.1简单示例2.2多个模板参数2.3模板实例化2.4模板和普通函数同时存在2.5函数模板不支持定义和声明分离3.类模板3.1简单示例3.2成员函数声...
    99+
    2024-04-02
  • C语言函数声明以及函数原型超详细讲解示例
    C语言代码由上到下依次执行,原则上函数定义要出现在函数调用之前,否则就会报错。但在实际开发中,经常会在函数定义之前使用它们,这个时候就需要提前声明。 所谓声明(Declaration...
    99+
    2023-02-11
    C语言函数声明 C语言函数原型 C语言函数声明与函数原型
  • Java 抽象类详细讲解
    目录 Java抽象类概念 Java抽象类示例 继承Animal类的子类的示例 Java抽象类详细使用方法 1、定义抽象类 2、继承抽象类 3、实现抽象方法 4、完整示例代码 Java抽象类概念 Java中抽象类是指用abstract关键...
    99+
    2023-09-04
    java jvm 开发语言 javase 面向对象
  • Rust包和Crate超详细讲解
    目录包和crate模块控制作用域与私有性use 进行模块引入包和crate 通过相关功能进行分组和划分不同的功能代码, 将代码分割成多个模块和多个文件组织代码, 一个包包含 多个cr...
    99+
    2022-12-16
    Rust包管理 Rust Crate
  • VueMVVM模型与data及methods属性超详细讲解
    目录1.MVVM模型2.data属性3.methods属性1.MVVM模型 ⭐⭐ MVC和MVVM都是一种软件的体系结构 MVC是Model – View –...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作