
go
文章平均质量分 69
烟火君
这个作者很懒,什么都没留下…
展开
-
Go标准库学习笔记-堆 (container/heap)
概述container/heap包对通用堆进行了定义并实现了标准堆操作函数,以此为基础可以很容易对各类堆和优先队列进行实现。类型接口heap包中最核心的就是heap.Interface接口,堆的基础存储是一个树形结构,可以用数组或是链表实现。通过heap的函数,可以建立堆并在堆上进行操作;要使用heap包的函数,你的类需要实现heap.Interface接口,定义如下://...原创 2018-04-23 18:33:00 · 2758 阅读 · 1 评论 -
GO标准库学习笔记-错误(errors)
概述在go中没有异常捕获机制,而是通过一个单独的函数返回值来表示错误信息。Error错误类型的接口定义如下:type error interface { Error() string}这个接口只有一个方法Error,这个方法返回一个字符串,描述错误的详情。在使用中,通常会通过直接实现Error方法来自定义错误类型,同时也可以传递不同的参数对错误状态进行...原创 2018-07-15 12:20:55 · 552 阅读 · 0 评论 -
Go标准库学习笔记-命令行工具(flag)
概述在运行命令行程序时,通常通过命令行参数对程序运行进行配置。在go程序中使用flag包,可以快速构建命令行程序,对于程序使用者只需要声明所需命令行参数。使用示例创建命令行程序可以分为两步:声明命令行参数运行flag.Parse,对参数进行解析然后就可以读取命令行参数了。例如如下程序可以创建一个命令行程序demo --foo hello --bar world...原创 2018-07-07 21:36:08 · 523 阅读 · 0 评论 -
Go标准库学习笔记-字符串处理(strings)
概述字符串是一个十分常用的基础类型,strings包提供了很多函数对string类型变量的操作。这些函数的调用方式大多类似,通过传入一个字符串为参数,在字符串上进行相应的处理。这些函数主要可以分为下面几类:字符串搜索和匹配字符串拆分字符串修改其他独立的函数字符串搜索与匹配strings.Contains可以检测字符串是否包含某个子串;strings.ContainsR...原创 2018-06-19 18:57:13 · 4170 阅读 · 0 评论 -
Go标准库学习笔记-文件路径(path)
概述path包提供了许多辅助函数来处理UNIX系统文件路径。辅助函数一个unix文件路径有如下格式<DirName>/<BaseName>分别对应于目录路径和基础路径,当这个路径表示一个文件时,BaseName就对应于文件名。其中Base函数获取一个路径的BaseName,Dir函数获取一个路径的DirName;具体函数声明如下:func Bas...原创 2018-06-25 22:06:33 · 2526 阅读 · 0 评论 -
Go标准库学习笔记-跨平台文件路径(filepath)
概述filepath包的功能和path包类似,但是对于不同操作系统提供了更好的支持。filepath包能够自动的根据不同的操作系统文件路径进行转换,所以如果你有跨平台的需求,你需要使用filepath。与path包相同的函数filepath包中的函数和path包很类似,其中对应函数的功能相同,只是一个可以跨平台,一个不能,所以这里不详细展开,可以从 path 中获取这些函数的详细说...原创 2018-06-29 11:35:28 · 2080 阅读 · 0 评论 -
GO标准库学习笔记-HTTP客户端与服务器(net/http)
概述net/http可以用来处理HTTP协议,包括HTTP服务器和HTTP客户端,http包主要由五个部分组成: - Request,HTTP请求对象 - Response,HTTP响应对象 - Client,HTTP客户端 - Server,HTTP服务端最简单的使用http包提供了对应于每个HTTP动词的函数来发送HTTP请求,当你不需要对请求进行详细的定制时可以直接使...原创 2018-06-01 15:38:13 · 1055 阅读 · 0 评论 -
GO标准库学习笔记-前缀数组(index/suffixarray)
概述suffixarray模块提供了基于前缀数组的子串检索功能,能够在byte数组中检索指定子串,并获得其索引下标。创建前缀数组可用通过New方法创建一个前缀数组,方法声明如下:func New(data []byte) *Index此外可以通过其Bytes方法,获取原始byte数组,方法声明如下:func (x *Index) Bytes() []byte...原创 2018-06-06 18:53:03 · 1614 阅读 · 1 评论 -
GO标准库学习笔记-IO工具(ioutil)
概述前面的io包提供了对输入输出设备最基本的抽象,而ioutil在io包的基础上提供了一系列的函数来应对具体的场景。数据读取ioutil一共提供了三个数据读取的函数,分别是: - ReadAll,从一个io.Reader读取所有数据,并返回一个字节数组 - ReadllDir,从一个目录读取数据,并得到这个目录里的文件对象列表 - ReadFile,读取指定文件的内容,并返回...原创 2018-05-29 19:09:46 · 2172 阅读 · 0 评论 -
Go标准库学习笔记-带缓冲的IO(bufio)
概述bufio模块通过对io模块的封装,提供了数据缓冲功能,能够一定程度减少大块数据读写带来的开销。实际上在bufio各个组件内部都维护了一个缓冲区,数据读写操作都直接通过缓存区进行。当发起一次读写操作时,会首先尝试从缓冲区获取数据;只有当缓冲区没有数据时,才会从数据源获取数据更新缓冲。Reader可以通过NewReader函数创建bufio.Reader对象,函数接收一个io...原创 2018-06-11 17:50:13 · 9662 阅读 · 0 评论 -
GO标准库学习笔记-IO(io)
概述IO是操作系统的基础概念,是对输入输出设备的抽象。Go语言的io库对这些功能进行了抽象,通过统一的接口对输入输出设备进行操作。ReaderReader对象是对输入设备的抽象,一个Reader可以绑定到一个输入对象,并在这个输入设备上读取数据,其声明如下:type Reader interface { Read(p []byte) (n int, err erro...原创 2018-05-27 20:01:10 · 1129 阅读 · 0 评论 -
Go标准库学习笔记-日志(log)
概述log 模块用于在程序中输出日志,它的使用十分简单,类似于fmt中的Print,一个最简单的示例如下:package mainimport "log"func main() { log.Print("Hello World")}上面的程序会在命令行打印一条日志:>>> 2018/05/16 16:48:06 Hello World...原创 2018-05-16 17:36:01 · 679 阅读 · 0 评论 -
Go标准库学习笔记-上下文 (context)
概述context也是并发环境的一个常用标准库,它用于在并发环境下在协程之间安全的传递某些上下文信息。一个经典的应用场景是服务器模型,当服务器处理接收到的请求时,通常需要并发的运行多个子任务,例如访问服务器,请求授权等。而这些任务都会以子协程的方式运行,也就是说一个请求绑定了多个协程,这些协程需要共享或传递某些请求相关的数据;此外当请求被撤销时,也需要有一种机制保证每个子协程能够安全的退出...原创 2018-05-08 17:38:06 · 1378 阅读 · 0 评论 -
Go标准库学习笔记-排序 (sort)
概述sort包实现了对列表的排序以及在有序列表上的二分查找等操作通用排序函数接口实现要使用sort包的各个函数,需要实现sort.Interface,定义如下:type Interface interface { Len() int // 返回当前元素个数 Less(i, j int) bool. // 判断第i...原创 2018-04-27 17:23:44 · 3153 阅读 · 1 评论 -
Go标准库学习笔记-循环链表 (container/ring)
概述Ring是一种循环链表结构,没有头尾,从任意一个节点出发都可以遍历整个链。其定义如下,Value表示当前节点的值:type Ring struct { Value interface{} }类型方法NewRing.New用于创建一个新的Ring,接收一个整形参数,用于初始化Ring的长度,其方法定义如下:func New(n int) ...原创 2018-04-26 15:23:27 · 1611 阅读 · 0 评论 -
Go标准库学习笔记-原子操作 (sync/atomic)
概述为了保证并发安全,除了使用临界区之外,还可以使用原子操作。顾名思义这类操作满足原子性,其执行过程不能被中断,这也就保证了同一时刻一个线程的执行不会被其他线程中断,也保证了多线程下数据操作的一致性。在atomic包中对几种基础类型提供了原子操作,包括int32,int64,uint32,uint64,uintptr,unsafe.Pointer。对于每一种类型,提供了五类原子操作分别是...原创 2018-05-04 10:53:33 · 8441 阅读 · 0 评论 -
Go标准库学习笔记-并发与同步 (sync)
概述sync包对并发和同步机制进行了实现,但显然并发编程这样一个话题过于庞大,无法在一篇博客里面详细展开,所以本文的重点放在sync包的使用。不过这里首先对并发的背景进行简单的介绍,在单线程的程序中,同一个时刻只存在一个线程对数据进行访问,访问永远是线性的,不需要额外的机制保障;但是当同时存在多个线程可能同时访问一个数据时,由于线程调度的特性,会带来难以预料的结果。试想如下代码会输出什么结...原创 2018-05-02 19:21:12 · 355 阅读 · 0 评论 -
Go标准库学习笔记-双向链表 (container/list)
概述container/list包实现了基本的双向链表功能,包括元素的插入、删除、移动功能链表元素链表中元素定义如下:type Element struct { Value interface{}}func (e *Element) Next() *Elementfunc (e *Element) Prev() *Element通过Value属性来获取...原创 2018-04-23 20:45:18 · 6698 阅读 · 2 评论 -
GO标准库学习笔记-字符串转换(strconv)
概述strconv包中包含了一系列辅助函数,用于字符串类型变量和其他类型变量之间的转换。Atoi & Itoa其中最常用的就是字符串和整型变量的相互转换。Atoi(string to int),Itoa(int to string)分别是字符串转整型和整型转字符串(注意:这个两个函数中的整型变量都是十进制整数)。函数声明如下:func Atoi(s string) (int, er...原创 2018-10-22 10:25:40 · 1022 阅读 · 1 评论