本文目录

  • 1.数据集合的主要操作

    • 1_1.字典的声明
    • 1_2.字典的初始化和创建
    • 1_3.字典的访问和操作
    • 1_4.其他类型的数据集
  • 2.文件操作
    • 2_1.文件操作概述os包和path包
    • 2_2.文件操作示例
      • 目录操作:
      • 打开与建立文件:
      • 写文件 :
      • 读文件:
      • 删除文件:
回到顶部

1.集合以及主要操作

首先要提到的是Go语言的内置数据类型map(字典类型 类似于Java中的HashMap和Swift中的Directory),这样你无需导入任何包便可 使用map类型了。map是一种特殊的数据结构,它是由一对无序的数据项组成,被称为键值对(Key-Value Pair)。其中的一项是键(Key) ,另一项是值(Value),map通过把键映射到值来进行访问,这种方式可以加快数据查找的速度(这也是map称为"字典"的原因)。

-1_1.字典的声明
回到顶部

1_1.字典的声明

在声明时,除了要定义字典名,还要指定"键"类型和"值"类型,"键"类型要使用一对"[]"括起来。字典一般声明格式如下:

var mapName map[keyType]valueType

说明:

(1)字典名的命名规则和变量名相同,遵循标示符命名规则

(2)不要给字典指定长度,字典的长度会在初始化或创建过程中动态增长

(3)Key必须是支持比较运算符(==、!=)的数据类型,比如整型‘浮点型、指针、数组、结构体、接口等,而不能是函数、字典、切片 这几种类型。

(4)Value类型可以是Go语言的任何基本数据类型

-1_2.字典的初始化和创建
回到顶部

1_2.字典的初始化和创建

字典声明好后必须经过初始化或创建才能使用,未初始化或创建的字典值为nil。可以使用"{}"操作符对字典进行初始化,或使用make()函数来创建字典。初始化或创建后,就可以使用"="操作符向字典动态增添数据项了。

例如下面的操作语句编译时会出错:

var map1 map[string]int
map1["key1"] = 1

出错的原因是虽然声明了字典map1,但map1没有被初始化,所以系统并没有给它分配存储空间,也就不能向map1中添加数据项了。 下面的操作语句是正确的:

var map1 map[string]int{}
map1["key1"] = 1

上面的操作语句正确,因为在声明字典map1的同时使用了"{}"操作符对字典进行了初始化,也就意味着系统给map1分配了存储空间,当然就可以使用"="操作符向map1添加数据项了。

下面的语句也是正确的:

var map1 map[string]int
map1 = make(map[string]int)
map1["key1"] = 1

这里首先声明字典map1,然后使用make()函数来创建map1,make函数操作的使之就是给map1分配存储空间,所以make后也可以使用"="操作符向map1添加数据项。

-1_3.字典的访问和操作
回到顶部

1_3.字典的访问和操作

1_3_1.字典项查找

在Go语言中,要从字典中查找一个特定的键值对,可以通过以下语句实现:

value, ok = mapName[Key]

这条语句执行后,如果查找的key值存在,则将key对应的value值赋予v,OK为true;反之,如果key不存在,则v等于0,ok为false。所以在使用时应该在每次取值操作后,先对ok进行判断,再进行对value的操作。

回到顶部

1_3_2.字典项的删除

Go语言提供内置的delete()函数用来删除容器中的元素。delete()函数也可以用于删除map内的键值对。

例如:

delete(map1, key1)

-1_4.其他类型的数据集
回到顶部

1_4.其他类型的数据集

Go语言的标准库中的container包下实现了其他几种数据集合类型,这些类型不像内置类型map那么常用,但在程序开发中提高了很多效率。下面简单地介绍一下:

包heap

官方的说明是:Package heap provides heap operations for any type that implements heap.Interface.

包heap为实现接口heap.Interface的所有类型提供了堆操作.

包list

官方的说明是:Package list implements a doubly linked list.

包list实现了一个双向链表。

包ring

官方说明是:Package ring implements operations on circular lists.

包ring实现了关于循环表的操作。

回到顶部

2.文件操作

-2_1.文件操作概述os包和path包

2_1.文件操作概述os包和path包

os包简介:Go语言的os包中包含了许多对系统相关的操作,而且是不依赖于系统平台的,正如官方描述的Package os provides a platform-independent interface to operating system functionality。这其中就包含了对进程(Process)和信号(Signal)等的一些操作,当然也包括对文件和目录的操作。下面的几个有关文件操作的函数和类型定义在os包中:

    func Mkdir(name string, perm FileMode) error func MkdirAll(path string, perm FileMode) error func Remove(name string) error func RemoveAll(path string) error func Rename(oldname, newname string) error func SameFile(fi1, fi2 FileInfo) bool type File func Create(name string) (file *File, err error) func NewFile(fd uintptr, name string) *File func Open(name string) (file *File, err error) func OpenFile(name string, flag int, perm FileMode) (file *File, err error) func Pipe() (r *File, w *File, err error) func (f *File) Chdir() error func (f *File) Chmod(mode FileMode) error func (f *File) Chown(uid, gid int) error func (f *File) Close() error func (f *File) Fd() uintptr func (f *File) Name() string func (f *File) Read(b []byte) (n int, err error) func (f *File) ReadAt(b []byte, off int64) (n int, err error) func (f *File) Readdir(n int) (fi []FileInfo, err error) func (f *File) Readdirnames(n int) (names []string, err error) func (f *File) Seek(offset int64, whence int) (ret int64, err error) func (f *File) Stat() (fi FileInfo, err error) func (f *File) Sync() (err error) func (f *File) Truncate(size int64) error func (f *File) Write(b []byte) (n int, err error) func (f *File) WriteAt(b []byte, off int64) (n int, err error) func (f *File) WriteString(s string) (ret int, err error) type FileInfo func Lstat(name string) (fi FileInfo, err error) func Stat(name string) (fi FileInfo, err error) type FileMode func (m FileMode) IsDir() bool func (m FileMode) IsRegular() bool func (m FileMode) Perm() FileMode func (m FileMode) String() string type LinkError func (e *LinkError) Error() string type PathError func (e *PathError) Error() string

path包简介:Package path implements utility routines for manipulating slash-separated paths. 译为:path包提供了对以斜杠分隔的路径的操作的常规方法。

回到顶部

-2_2.文件操作示例

2_2.文件操作示例

目录操作:

package mainimport ("fmt""os"
)func main() {os.Mkdir("mike", 0777) //func Mkdir(name string, perm FileMode) error//创建名称为name的目录,权限设置是perm,例如0777os.MkdirAll("mike/test1/test2", 0777) //func MkdirAll(path string, perm FileMode) error//根据path创建多级子目录,例如mike/test1/test2err := os.Remove("mike") //func Remove(name string) error//删除名称为name的目录,当目录下有文件或者其他目录是会出错if err != nil {fmt.Println(err)}os.RemoveAll("mike")   //func RemoveAll(path string) error//根据path删除多级子目录,如果path是单个名称,那么该目录不删除。
}

打开与建立文件:

新建文件可以通过如下两个方法

  func Create(name string) (file *File, err Error)

根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件对象是可读写 的。

    func NewFile(fd uintptr, name string) *File

根据文件描述符创建相应的文件,返回一个文件对象 通过如下两个方法来打开文件:

 func Open(name string) (file *File, err Error)

该方法打开一个名称为name的文件,但是是只读方式,内部实现其实调用了OpenFile。

    func OpenFile(name string, flag int, perm uint32) (file *File, err Error)

打开名称为name的文件,flag是打开的方式,只读、读写等,perm是权限

写文件:

写文件函数:

   func (file *File) Write(b []byte) (n int, err Error)

写入byte类型的信息到文件

  func (file *File) WriteAt(b []byte, off int64) (n int, err Error)

在指定位置开始写入byte类型的信息

 func (file *File) WriteString(s string) (ret int, err Error)

写入string信息到文件

写文件的示例代码

package mainimport ("fmt""os"
)func main() {userFile := "mike.txt"fout, err := os.Create(userFile)defer fout.Close()if err != nil {fmt.Println(userFile, err)return}for i := 0; i < 10; i++ {fout.WriteString("Just a test!\r\n")fout.Write([]byte("Just a test!\r\n"))}
}

读文件:

读文件函数:

  func (file *File) Read(b []byte) (n int, err Error)

读取数据到b中

 func (file *File) ReadAt(b []byte, off int64) (n int, err Error)

从off开始读取数据到b中

读文件的示例代码:

package mainimport ("fmt""os"
)func main() {userFile := "mike.txt"fl, err := os.Open(userFile)defer fl.Close()if err != nil {fmt.Println(userFile, err)return}buf := make([]byte, 1024)for {n, _ := fl.Read(buf)if 0 == n {break}os.Stdout.Write(buf[:n])}
}

删除文件:

Go语言里面删除文件和删除文件夹是同一个函数

   func Remove(name string) Error

调用该函数就可以删除文件名为name的文件

转载于:https://www.cnblogs.com/Mike-zh/p/3790682.html

【Go语言】集合与文件操作相关推荐

  1. day3 集合、文件操作、函数、局部变量

    文章目录 1.集合 2.文件操作 3.函数 4.局部变量 1.集合   集合是一个无序的,不重复的数据组合,它的主要作用如下:   1)去重,把一个列表变成集合,就自动去重了   2)关系测试,测试两 ...

  2. 【C 语言】文件操作 ( C 语言中的文件操作函数 | 磁盘与内存缓冲区 | 缓冲区工作机制 )

    文章目录 一.C 语言中的文件操作函数 二.磁盘与内存缓冲区 三.缓冲区工作机制 一.C 语言中的文件操作函数 读取 文本文件 可以使用 getc , fgets , fscanf 函数 , 向 文本 ...

  3. Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

     上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #in ...

  4. 【C语言复习】C语言中的文件操作

    C语言中的文件操作 写在前面 文件操作 什么是文件 文件的分类 文件名 文件的操作 文件指针 文件的打开和关闭 文件的顺序读写 文件的随机读写 fseek ftell rewind feof 写在前面 ...

  5. C语言详解文件操作(一):文件操作基础概念、按照字符、按照行块、按照格式化和随机位置读写文件

    文章目录 一.文件操作基础概念 二.文件读写:按照字符方式读写 三.文件读写:按行和块读写 四.文件读写:格式化和随机位置 一.文件操作基础概念 C语言中的文件操作的好处:       一个文件通常是 ...

  6. C语言字符串、文件操作常用操作函数,

    C语言字符串常用操作函数 C语言字符串.文件操作常用操作函数 字符串输出 - puts() 字符串输入 - gets() 字符串比较 - strcmp() 字符串复制 - strcpy() 字符串连接 ...

  7. C/C++语言入门篇 -- 文件操作

    最近实在是太忙了,这篇整整就推迟了1个月了,实在是对不起.之前本打算这个模块就结束了,文件操作就不写了,但是文件操作又是一个很重要的东西,而且也刚好能够总结之前我们学习的所有知识.同时也为了将文件操作 ...

  8. C语言目录和文件操作扩展

    文章目录 一.access库函数 二.stat库函数 1.stat结构体 2.stat库函数 三.utime库函数 四.rename库函数 五.remove库函数 六.课后作业 七.获取视频教程 八. ...

  9. Python基础:集合与文件操作

    集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...

最新文章

  1. 关于AD编程的一些资料
  2. Python字符编码详解
  3. 拼多多二面:Mybatis是如何执行一条SQL命令的?
  4. bitwarden自建服务器,BitWarden
  5. python将数字转变为中文读法-python中将阿拉伯数字转换成中文的实现代码
  6. 剑指offer 面试36题
  7. time、deltaTime、fixedTime、fixedDeltatime的区别
  8. 3/14课程 第三章 结构化的项目前期和面向对象的项目前期实例
  9. js大屏导出图片_整理了30个实用可视化大屏模板,附源文件+工具
  10. Ubuntu安装搭建Clion环境
  11. idea mysql错误提示_idea提示错误:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
  12. Scratch3.0学习视频链接
  13. 通用对话框Dialog
  14. Scala:par并行集合计算(fold、aggregate)结果与cpu内核线程的关系
  15. 英语单词辨析(同类单词)
  16. pynq-z2 使用PL做流水灯
  17. 程序员一定要会的软件项目管理评估方案,不做只会敲代码的码农!(建议收藏)
  18. C语言视频教程-谭浩强版-小甲鱼主讲—P13
  19. 盘点 yMatrix 创业的530天:1.01^530,苟日新,日日新,又日新
  20. 论文词汇:使用Although转折引出,本文研究内容还没有很多关注。

热门文章

  1. Docker(十二)关于deployment 创建的小坑
  2. Editplus中添加System.out.println()快捷键
  3. discuz加密解密,可参考下
  4. 河南省某炮旅的RAID5恢复
  5. JavaScript事件监听完整实例(含注释)
  6. T-SQL Optimization Tips (3): SELECT COUNT(*)
  7. 有这样的开发,产品经理跪着帮你擦汗!
  8. Sencha Touch 给 Panel 注册点击事件(tap)和其他touchstart,touchend 等事件
  9. 第三章-电商项目-优化评论分页查询
  10. html中metaf属性ormat-detection的意义