【Go语言】集合与文件操作

本文目录

  • 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 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语言】集合与文件操作

时间: 2024-10-12 09:19:18

【Go语言】集合与文件操作的相关文章

C语言样式的文件操作函数

使用C语言样式的文件操作函数,需要包含stdio.h头文件. 1.打开文件的函数: 1 //oflag的取值为“w”或“r”,分别表示以写或读的方式打开 2 FILE* fd = fopen(filename.c_str(), oflag); 2.写文件的函数原型: size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream ); 其中buffer是需要向文件中写入的内容在内存中的首地址指针,size是待写入

集合与文件操作

今天在云和学院学习了集合和文件操作 ArrayList的添加.移除.清除 string[] strs = { "阳光路上", "如果爱", "玫瑰花的葬礼", "超级英雄" }; string str = "love"; int i = 1; double d = 10.21; float f = 1.2f; ArrayList arraylist = new ArrayList(); arraylist.

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

?? 上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存

Ruby七天入门(3 Mixin,集合,文件操作)

DAY 3 学习进入第三天,今天计划学习模块,集合以及简单的文件操作. 3.1Mixin 模块 面向对象语言使用继承,来将行为传播到相似的对象上.具体到语言,C++使用的是多继承,但是过于复杂,Java采用接口的方式,而Ruby则选择使用了模块,先来看下代码: module ToFile def filename "object_#{self.object_id}.txt" end def to_f file = File.open(filename,'w') file.write(t

python基础(集合、文件操作)

集合: 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系测试,测试两组数据之前的交集.差集.并集等关系. 1,集合的创建. set1 = set({1,2,'barry'}) set2 = {1,2,'barry'} print(set1,set2) # {1, 2, 'barry'} {1, 2, 'barry'} 2,集合的增. set1 = {'

Go语言基础之文件操作

本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open()函数能够打开一个文件,返回一个*File和一个err.对得到的文件实例调用close()方法能够关闭文件. package main import ( "fmt" "os" ) func main() { // 只读方式打开当前目录下的main.go文件 file, err := os

python基础_集合、文件操作

集合 集合是一个无序的且数据不会重复.有去重.关系测试的作用 list = ["11","22","33","44","55"] list = set(list) print(list,type(list)) 结果为: {'33', '11', '22', '55', '44'} <class 'set'> 关系测试list1 = set(["11","22&quo

python学习笔记-(七)python基础--集合、文件操作&amp;函数

本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数操作 1.集合操作 集合是一个无序的.不重复的数据组合: 1.1 常用操作 它的作用是: 1)自动去重:列表变成集合,自动去重: 1 2 3 4 >>> list_1 = [1,4,4,5,6,7,9,10] >>> list_1 =set(list_1) >>> print(list_1) {1, 4, 5, 6, 7, 9, 10} 2)关系测试:测试两组数据之间的关系,交集.并集.

重修课程day6(python基础4之集合和文件操作)

一 字典属性方法补充 1 clear  :清空 2 Cory:拷贝 3 fromkeys:生成一个字典,类下面的一个属性方法 4 pop  :删除 5 popitem  : 删除整个元素 6 setdefault:只添加不修改 7 update :存在的话跟新,没有就会添加 二 集合以及集合的功能 集合是一个不存在重复的值,而且还是无序的. 1 add :添加不可能重复 2 clear :清空 3 copy :拷贝 4 difference :差集只存在一个集合的 5 difference_up