go标准库--走马观花

2017-09-07 12:20:13

Go有一套很有用的标准库(standard library)。它是Go的一个组成部分。这些标准库是Go为你准备好的利器,可以让编程事半功倍。

我将根据我个人的使用经验中,挑选出标准库三个方面的包(package)介绍:

  • go增强
  • 系统互动
  • 网络
go增强

go自身的已有的一些功能可以随着标准库的使用而得到增强

  • 文字处理
    Go的strings包提供了对字符串进行处理的方法.更进一步,通过标准库中的regexp包,Go可以用正则表达式(regular expression)来处理字符串。
    正则表达式是一个字符串模板。Go可以从字符中搜查符合该模板的部分,或者对这一部分替换成其它内容。比如你可以搜索一个文本中所有的数字。正则表达式的关键在于根据自己的需要构成模板。
    此外,Go标准库还为字符串的输出提供更加丰富的格式,比如: strconv,bytes,unicode

  • 数据结构与算法
    数据结构是数据组织和存储的逻辑形式,为了有效的使用资源,在时间和空间上有效的算法可以帮助我们,Go标准库提供了sort,inedex/suffixary,container
    sort 包包含基本的排序方法,支持切片数据排序以及用户自定义数据集合排序
    index/suffixary 包实现了后缀数组相关算法以支持许多常见的字符串操作
    container 包提供了对heap、list和ring这3种数据结构的底层支持。任何实现了相应接口的数据结构都可以调用该结构的方法

  • 日期和时间
    日期和时间的管理并不复杂,但容易犯错。经常会遇到日期和时间相关的操作,比如:格式化日期和时间,解析一个日期时间字符串等。Go语言通过标准库 time 包处理日期和时间相关的问题
    time包提供了用于测量时间、解析和格式化日期,日期/时间以及时间值的函数。time.After()函数可用于在特定纳秒后,向通道 (channel)发送当前时间。time.Tick()和time.NewTicker()函数可用于提供一个通道,它会返回在特定时间间隔后将 ‘tick’发送到该通道上。time.Time结构具有一些方法,可提供当前时间,将data/time格式化为一个字符串以及解析data /time

  • 数学运算
    math/big包提供了无限大(实际受限于内存)整型数(big.Int)以及有理数(big.Rat)。math包提供了所有标准数学函数(基于float64)以及一些标准常量。math/cmplx包提供一些用于复数计算的标准函数(基于complex128)
    此外,math/rand包提供许多有用的伪随机数生成函数,包括返回一个随机整型数的rand.Int()以及rand.Intn(n),后者返回[0,n]范围内的一个随机整数。crypto/rand包中有一个函数,可用于产生加密的强伪随机数字

  • 存储
    在数据交换方面,有很多成熟的协议可以使用,常用的有:JSON、XML等,Go 语言提供了解析它们的标准库;同时,为了方便 Go 程序直接数据交换,Go 专门提供了 gob 这种交换协议
    此外,标准库中还支持基本的数据库功能(database/sql包),csv格式的文件也有相应的处理包

  • 数据压缩与归档
    Go 标准库实现了一些最流行的压缩标准。zlib 和 gzip 提供了 GNU zip 库,bzip2 用于读写 bzip2 格式
    标准库提供了 LZW 压缩算法(串表压缩算法)的实现,该算法常用的文件格式:GIF 和 PDF。
    标准库还提供一些包管理归档(archive)格式,archive/tar 读写 UNIX 磁带归档格式,archive/zip 根据 zip 格式来处理归档

系统互动
  • 操作系统
    Go 的标准库提供了很多工具,可以处理文件系统中的文件、构造和解析文件名等,path包提供的函数用于操作Unix样式路径
    runtime包包含了许多函数和类型用于访问Go的运行时系统

  • 进程与线程
    在Go中提供os 包及其子包 os/exec 提供了创建进程的方法,同时,我们知道在 Linux 中,通过系统调用 clone() 来实现线程的,在 Go 中,通过 clone() 系统调用来创建线程

网络
  • 网络包
    Go标准库中有许多包用于支持网络以及相关方面的编程。net包提供的函数和类型可用于使用Unix域以及网络socket通信、TCP/IP和UDP编程
    net/http包充分利用了net包,并提供了解析HTTP请求和应答的功能,并提供了一个基本的HTTP客户端。net/http包也包含一个易于扩展的HTTP server。net/url包提供了URL解析和查询转义
    标准库中还包含其他一些其他高层次的网络包。一个是net/rpc(远程过程调用)包,它允许一个服务端提供导出可被客户端调用的方法的对象。另外一个是net/smtp(简单邮件传输协议)包,可用于发送email

以上的介绍比较粗糙,只希望能为大家提供一个了解标准库的入口。欢迎大家一起分享标准库的使用经验。


您的鼓励是我写作最大的动力

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。