【Go语言】集合与文件操作
1.集合以及主要操作
首先要提到的是Go语言的内置数据类型map(字典类型 类似于Java中的HashMap和Swift中的Directory),这样你无需导入任何包便可 使用map类型了。map是一种特殊的数据结构,它是由一对无序的数据项组成,被称为键值对(Key-Value Pair)。其中的一项是键(Key) ,另一项是值(Value),map通过把键映射到值来进行访问,这种方式可以加快数据查找的速度(这也是map称为"字典"的原因)。
1_1.字典的声明
在声明时,除了要定义字典名,还要指定"键"类型和"值"类型,"键"类型要使用一对"[]"括起来。字典一般声明格式如下:
var mapName map[keyType]valueType
说明:
(1)字典名的命名规则和变量名相同,遵循标示符命名规则
(2)不要给字典指定长度,字典的长度会在初始化或创建过程中动态增长
(3)Key必须是支持比较运算符(==、!=)的数据类型,比如整型‘浮点型、指针、数组、结构体、接口等,而不能是函数、字典、切片 这几种类型。
(4)Value类型可以是Go语言的任何基本数据类型
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.字典项查找
在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.其他类型的数据集
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包
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.文件操作示例
目录操作:
package main import (
"fmt"
"os"
) func main() {
os.Mkdir("mike", 0777) //func Mkdir(name string, perm FileMode) error
//创建名称为name的目录,权限设置是perm,例如0777
os.MkdirAll("mike/test1/test2", 0777) //func MkdirAll(path string, perm FileMode) error
//根据path创建多级子目录,例如mike/test1/test2
err := 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 main import (
"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 main import (
"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的文件
【Go语言】集合与文件操作的更多相关文章
- C语言样式的文件操作函数
使用C语言样式的文件操作函数,需要包含stdio.h头文件. 1.打开文件的函数: //oflag的取值为“w”或“r”,分别表示以写或读的方式打开 FILE* fd = fopen(filename ...
- Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解
上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #in ...
- Unix/Linux环境C编程新手教程(41) C语言库函数的文件操作具体解释
上一篇博客我们解说了怎样使用Linux提供的文件操作函数,本文主要解说使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #in ...
- python03-break、continue、for循环、数据bytes类型、字符串与字节的关系、变量指向与深浅拷贝、set集合、文件操作
目录: 1.break.continue 2.for循环 3.数据bytes类型 4.字符串与字节的关系 5.变量指向与深浅拷贝 6.set集合 7.文件操作 一.break.continue bre ...
- Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数
1. 集合 1.1 特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...
- NO.3:自学python之路------集合、文件操作、函数
引言 本来计划每周完成一篇Python的自学博客,由于上一篇到这一篇遇到了过年.开学等杂事,导致托更到现在.现在又是一个新的学期,春天也越来越近了(冷到感冒).好了,闲话就说这么多.开始本周的自学Py ...
- Go语言基础之文件操作
本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open()函数能够打开一个 ...
- GO学习-(16) Go语言基础之文件操作
Go语言文件操作 本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open( ...
- Python学习Day2笔记(集合和文件操作)
1.集合的使用 列表是有序的可包含重复内容的 集合是无序的不可包含重复内容的 1) 集合关系测试 #列表去重list_1=[1,4,5,6,7,8,9,7,5,4,23,2] #有重复数据 list_ ...
随机推荐
- 剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计算法找其中的一个数
题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 2 4 9 12 4 7 10 13 6 8 11 ...
- HTML概况性介绍
HTML(HyperText Markup Language)汉语的意思是:超文本标记语言. ”超文本”是指.html页面内不仅仅可以包含文字,还可以包含图片.链接,甚至音乐.程序等非文字元素. “标 ...
- RMI的概念
RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机上的对象可以调用另外一台计算机上的对象来 ...
- 【SQL Sever】SQL Sever数据库重命名
将SQL数据库重命名,会有两种情况: 1.未使用的数据库 方法:未使用的数据库改名比较方便,找到你要更改的数据库,右键选择[重命名] 然后就可以重新起名字了,重新起名字之后,点击其他的空白处就可以了, ...
- Practical Java (一)关于reference
Practice 1, 4, 7, 8 1. 参数传递:by value or by reference 变量型别:reference 和 primitive Java中的变量分为两种:referen ...
- mysql一些有用的链接
1.mysql安装:http://jingyan.baidu.com/article/f79b7cb35c0f439144023e38.html
- mysql 怎样清空一个数据库中的所有表
转自:http://blog.csdn.net/zhangzhizhen1988/article/details/8432146 MySQL清空表是很重要的操作,也是最常见的操作之一,下面就为您详细介 ...
- 【转】最近搞Hadoop集群迁移踩的坑杂记
http://ju.outofmemory.cn/entry/237491 Overview 最近一段时间都在搞集群迁移.最早公司的hadoop数据集群实在阿里云上的,机器不多,大概4台的样子,据说每 ...
- ubuntu安装shadowshocks-qt5
sudo add-apt-repository ppa:hzwhuang/ss-qt5 sudo apt-get update sudo apt-get install shadowsocks-qt5 ...
- 最火的.NET开源项目
综合类 微软企业库 微软官方出品,是为了协助开发商解决企业级应用开发过程中所面临的一系列共性的问题, 如安全(Security).日志(Logging).数据访问(Data Access).配置管理( ...