Go标准库概览
文件路径
path包
提供的函数用于操作Unix样式路径,例如Linux和Mac OS X路径,用于处理URL路径,git“引用”,FTP文件等。path/filepath包提供提供了与path相同的函数- 许多其他的 – 函数被设计用于提供平台中立的路径处理。这个包还提供了filepath.Walk()函数用于递归地对给定路径下的所有文件和目录进行迭代访问。
文件
- path:实现了对斜杠分隔的路径的实用操作函数.
- filepath:实现了兼容各操作系统的文件路径的实用操作函数.
Archive(归档)和Compression(压缩)包
Go支持读写tarball和.zip文件。与此相关的包为archive/tar和archive/zip;以及用于压缩tarball的 compress/gzip和compress/bzip2。
Go同样也支持其他压缩格式;例如用于TIFF图像和PDF文件的Lempel-Ziv-Welch (compress/lzw)格式。
归档
Go支持读写tarball和.zip文件。
- archive
- tar:实现了tar格式压缩文件的存取.
- zip:提供了zip档案文件的读写服务.
压缩
- compress
- bzip2:实现bzip2的解压缩.
- flate:实现了deflate压缩数据格式,参见RFC 1951.
- gzip:实现了gzip格式压缩文件的读写,参见RFC 1952.
- lzw:实现了Lempel-Ziv-Welch数据压缩格式,这是一种T. A. Welch在“A Technique for High-Performance Data Compression”一文(Computer, 17(6) (June 1984), pp 8-19)提出的一种压缩格式.
- zlib:实现了对zlib格式压缩数据的读写,参见RFC 1950.
crypto包
提供了使用MD5, SHA-1, SHA-224, SHA-256, SHA-384以及SHA-512算法的Hash(每个算法由一个包提供,例如crypto/sha512)。此外,crypto还提供了用于加密和解密 的子包,这些包使用了不同算法,诸如AES、DES等等。每个包都对应相应的名字(例如,crypto/aes和crypto/des)。
加密与Hash
- crypto:搜集了常用的密码(算法)常量.
- aes:实现了AES加密算法,参见U.S. Federal Information Processing Standards Publication 197.
- cipher:实现了多个标准的用于包装底层块加密算法的加密算法实现.
- des:实现了DES标准和TDEA算法,参见U.S. Federal Information Processing Standards Publication 46-3.
- dsa:实现FIPS 186-3定义的数字签名算法(Digital Signature Algorithm),即DSA算法.
- ecdsa:实现了椭圆曲线数字签名算法,参见FIPS 186-3.
- elliptic:实现了几条覆盖素数有限域的标准椭圆曲线.
- hmac:实现了U.S. Federal Information Processing Standards Publication 198规定的HMAC(加密哈希信息认证码).
- md5:实现了MD5哈希算法,参见RFC 1321.
- rand:实现了用于加解密的更安全的随机数生成器.
- rc4:实现了RC4加密算法,参见Bruce Schneier's Applied Cryptography.
- rsa:实现了PKCS#1规定的RSA加密算法.
- sha1:实现了SHA1哈希算法,参见RFC 3174.
- sha256:实现了SHA224和SHA256哈希算法,参见FIPS 180-4.
- sha512:实现了SHA384和SHA512哈希算法,参见FIPS 180-2.
- subtle:Package subtle implements functions that are often useful in cryptographic code but require careful thought to use correctly.
- tls:实现了TLS 1.2,细节参见RFC 5246.
- x509:解析X.509编码的证书和密钥.
- pkix:提供了共享的、低层次的结构体,用于ASN.1解析和X.509证书、CRL、OCSP的序列化.
Bytes(字节)和String(字符串)相关包
bytes和strings包中有很多相同的函数,但前者操作的是[]byte类型的值,而后者操作的是string类型的值。strings包 提供了所有最有用的功能函数,诸如查找子字符串、替换子字符串、拆分字符串、剔除字符串以及大小写变换等。strconv包提供了数字和布尔类型 与string类型相互转换的功能。
字节操作
- bytes:实现了操作[]byte的常用函数.
字符串处理
- strconv:实现了基本数据类型和其字符串表示的相互转换.
- html:提供了用于转义和解转义HTML文本的函数.
- template:实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出.
- strings:实现了用于操作字符的简单函数.
- text
- scanner:提供对utf-8文本的token扫描服务.
- tabwriter:实现了写入过滤器(tabwriter.Writer),可以将输入的缩进修正为正确的对齐文本.
- template:实现了数据驱动的用于生成文本输出的模板.
- parse:Package parse builds parse trees for templates as defined by text/template and html/template.
- index
- suffixarray:通过使用内存中的后缀树实现了对数级时间消耗的子字符串搜索.
- regexp:实现了正则表达式搜索.
- syntax:Package syntax parses regular expressions into parse trees and compiles parse trees into programs.
格式化
- fmt:实现了格式化I/O函数,类似于C的 printf 和 scanf.
IO
io(input/output)包
提供了大量的函数用于与io.Reader和io.Writer一起工作(这两个接口都可以被os.File类型值满 足)。例如,我们曾用过io.Copy()函数将数据从一个reader拷贝到一个writer中。这个包还包含了用于创建同步的内存管道(pipe)的函数。
io/iotuil包
提供了一些非常易用的函数。其中,这个包提供的ioutil.ReadAll()函数用于读取一个io.Reader的所有数据,并 将数据放入一个[]byte中返回;ioutil.ReadFile()函数所做的事情类似,只是参数由一个io.Reader换成了一个字符串(文件 名);ioutil.TempFile()函数返回一个临时文件(一个os.File);ioutil.WriteFile()函数向一个给定名字的文件 中写入由[]byte承载的数据。
IO
- io:为I/O原语提供了基础的接口.
- ioutil:实现了一些I/O的工具函数。
- bufio:实现了带缓存的I/O操作.
os(操作系统)
提供了与操作系统交互相关的函数,诸如改变当前工作目录,修改文件模式和所有权,获取和设置环境变量,创建和删除文件和目录等。
此外,该包还提供了创建和打开文件(os.Create()和os.Open())、获取文件属性(例如,通过os.FileInfo类型),以及在之前系列文章中我们所见过的函数。
一旦文件被打开,尤其是对于那些文本文件,通过一个buffer来访问该文件是非常常见的情况(将读取的行存入字符串而不是byte切片)。我们需要的这 个功能由bufio包提供。除了用bufio.Reader和bufio.Writer进行读写字符串外,我们还可以读(不读)rune,读(不读)单字 节,读多字节以及写rune和写单字节以及多字节。
exec包
用于运行外部程序。我们也可以使用os.StartProcess来完成这件事,但exec.Cmd类型用起来更加简单。
操作系统
- os:提供了操作系统函数的不依赖平台的接口.
- exec:执行外部命令.
- signal:实现了对输入信号的访问.
- user:允许通过名称或ID查询用户帐户.
- syscall:Package syscall contains an interface to the low-level operating system primitives.
网络
Go标准库中有许多包用于支持网络以及相关方面的编程。net包提供的函数和类型可用于使用Unix域以及网络socket通信、TCP/IP和UDP编程。
这个包还提供了用于域名解析的函数。net/http包充分利用了net包,并提供了解析HTTP请求和应答的功能,并提供了一个基本的HTTP客户端。net/http包也包含一个易于扩展的HTTP server。net/url包提供了URL解析和查询转义。
标准库中还包含其他一些其他高层次的网络包。一个是net/rpc(远程过程调用)包,它允许一个服务端提供导出可被客户端调用的方法的对象。另外一个是net/smtp(简单邮件传输协议)包,可用于发送email。
网络编程
mime:实现了MIME的部分规定.
- multipart:实现了MIME的multipart解析,参见RFC 2046.
net:提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket.
- http:提供了HTTP客户端和服务端的实现.
* cgi:实现了RFC3875协议描述的CGI(公共网关接口). * cookiejar:实现了保管在内存中的符合RFC 6265标准的http.CookieJar接口. * fcgi:实现了FastCGI协议. * httptest:提供HTTP测试的单元工具. * httputil:提供了HTTP公用函数,是对net/http包的更常见函数的补充. * pprof:通过提供HTTP服务返回runtime的统计数据,这个数据是以pprof可视化工具规定的返回格式返回的.
- mail:实现了解析邮件消息的功能.
- rpc:提供了一个方法来通过网络或者其他的I/O连接进入对象的外部方法.
- jsonrpc:使用了rpc的包实现了一个JSON-RPC的客户端解码器和服务端的解码器.
- smtp:实现了简单邮件传输协议(SMTP),参见RFC 5321.
- textproto:实现了对基于文本的请求/回复协议的一般性支持,包括HTTP、NNTP和SMTP.
- url:解析URL并实现了查询的逸码,参见RFC 3986.
- http:提供了HTTP客户端和服务端的实现.
集合包
切片是Go语言提供了最高效的集合类型,但有些时候使用一个更为特定的集合类型更有用或有必要。在多数情况下,内置的map类型已经足够了,但Go标准库还是提供了container包,其中包含了各种不同的集合包。
container/heap包
提供了操作heap(堆)的函数,这里heap必须是一个自定义类型的值,该类型必须满足定义在heap包中 heap.Interface。一个heap(严格地说是一个min-heap)按特定顺序维护其中的值 – 即第一个元素总是heap中最小的(对于max-heap,应该是最大的)- 这就是熟知的heap属性。heap.Interface中嵌入了sort.Interface以及Push()和Pop方法。
container/list包
提供了双向链表。元素以interface{}类型的值加入链表。从链表中获取的元素的类型为list.Element,其原始值可通过list.Element.Value访问到。
sort包
提供了许多方便易用的函数,用于对ints、float64以及string类型的切片进行排序,并且提供基于有序切片的高效(二分查找)的查找。它还提供了用于自定义数据的通用sort.Sort()和sort.Search函数。
数据结构
- sort:为切片及用户定义的集合的排序操作提供了原语.
- container
- heap:提供了对任意类型(实现了heap.Interface接口)的堆操作.
- list:实现了双向链表.
- ring:实现了环形链表的操作.
数据库
- database
- sql:提供了通用的SQL(或类SQL)数据库接口.
- driver:定义了应被数据库驱动实现的接口,这些接口会被sql包使用.
- sql:提供了通用的SQL(或类SQL)数据库接口.
文件格式
Go提供出色的文件处理功能,既可用于文本文件(使用7-bit ASCII编码或UTF-8和UTF-16 Unicode编码),也可用于二进制文件。Go提供了专门的包,用于处理JSON和XML文件以及它自己专有的快速、简洁以及方便的Go二进制格式。此 外,Go提供了csv包用于读取CSV(逗号分隔的值)文件。这个包将这些文件视为记录(每行算作一个记录),么个记录由多个(逗号分隔的)字段组成。这 个包用途非常广泛,例如,可以用它修改分隔符(从逗号改为tab或其他字符),以及其他诸如如何读写记录和字段的方面。
encoding包
包含许多子包,其中的encoding/binary包我们曾用于读写二进制数据。其他包提供了针对各种格式的编解码功能 – 例如,encoding/base64包可以用于编码和解码我们日常常用的URL。
编解码
- encoding:定义了供其它包使用的可以将数据在字节水平和文本表示之间转换的接口.
- ascii85:对 ascii85 的数据编码的实现.
- asn1:实现了DER编码的ASN.1数据结构的解析,参见ITU-T Rec X.690.
- base32:实现了RFC 4648规定的base32编码.
- base64:实现了RFC 4648规定的base64编码.
- binary:实现了简单的数字与字节序列的转换以及变长值的编解码.
- csv:读写逗号分隔值(csv)的文件.
- gob:管理gob流——在编码器(发送器)和解码器(接受器)之间交换的binary值.
- hex:实现了16进制字符表示的编解码.
- json:实现了json对象的编解码,参见RFC 4627.
- pem:实现了PEM数据编码(源自保密增强邮件协议).
- xml:Package xml implements a simple XML 1.0 parser that understands XML name spaces.
unicode
提供一些用于确定字符属性的函数,诸如判断一个字符是否是可打印的,或是否是一个数字。unicode/utf8与 unicode/utf16这两个包提供了rune(即,Unicode码点/字符)的编码和解码功能。
字符集
- unicode:提供了一些测试Unicode码点属性的数据和函数.
- utf16:实现了对UTF-16序列的编码和解码。
- utf8:实现了支持UTF-8文本编码的函数和常量.
Hash算法
- hash:提供hash函数的接口.
- adler32:实现了Adler-32校验和算法,参见RFC 1950.
- crc32:实现了32位循环冗余校验(CRC-32)的校验和算法.
- crc64:Package crc64 implements the 64-bit cyclic redundancy check, or CRC-64, checksum.
- fnv:实现了FNV-1和FNV-1a(非加密hash函数).
图像相关包
Go的image包提供了一些高层次的函数和类型,用于创建和持有图像数据。它还提供了一些包,可用于不同种类标准图像文件格式的编解码,例如image/jpeg和image/png。
image/draw包
提供了一些基本的绘图函数。第三方的freetype包加入了更多绘图函数。freetype自身可以使用任意指定TrueType字体绘制文本,freetype/raster包可以绘制线条以及立方和二次曲线。
图片
- image:实现了基本的2D图片库.
- color:实现了基本的颜色库。
- palette:提供了标准的调色板.
- draw:提供组装图片的方法.
- gif:实现了GIF图片的解码.
- jpeg:实现了jpeg格式图像的编解码.
- png:实现了PNG图像的编码和解码.
- color:实现了基本的颜色库。
log包
提供了一些函数,用于记录日志信息(默认输出到os.Stdout)、结束程序或抛出异常(panick)并携带一条日志信息。log包输出目标 可以使用log.SetOutput()函数变更为任何io.Writer。日志信息以一个时间戳加后续消息的格式输出;时间戳的分割符可以在调用第一个 log函数之前通过log.SetFlags(0)设置。通过log.New()函数我们还可以创建自定义的logger。
日志
- log:实现了简单的日志服务.
- syslog:提供一个简单的系统日志服务的接口.
命令行
flag包
提供了一个命令行解析器。它接受X11风格的命令行选项(例如,-width,非GNU风格的-w以及–width)。这个包产生一个非常基 本的usage消息并且没有提供除值类型之外的任何校验(因此,这个包可以用于指定一个int型选项,而不是用于检查接受哪些值)。还有一些候选包可以在 Go Bashboard中找到。
flag flag 包实现命令行标签解析.
数学
math/big包提供了无限大(实际受限于内存)整型数(big.Int)以及有理数(big.Rat)。math包提供了所有标准数学函数(基于float64)以及一些标准常量。math/cmplx包提供一些用于复数计算的标准函数(基于complex128)。
math/rand包
提供许多有用的伪随机数生成函数,包括返回一个随机整型数的rand.Int()以及rand.Intn(n),后者返回[0,n]范围内的一个随机整数。crypto/rand包中有一个函数,可用于产生加密的强伪随机数字。regexp包提供快速且强大的正则式引擎,并支持RE2引擎的语法。
数学
- math:提供了基本常数和数学函数。
- big:实现了(大数的)高精度运算.
- cmplx:为复数提供了基本的常量和数学函数.
- rand:实现了伪随机数生成器.
反射
reflect包提供了运行时反射(或称为自省);即,在运行时访问和与任意类型的值交互的能力。
这个包还提供了一些有用的工具函数,诸如reflect.DeepEqual()用于比较任意两个值 – 例如,切片,我们无法用==和!=操作符对其进行比较。
Go中的每个值都有两个属性:它的实际值与类型。reflect.TypeOf()函数可以告诉我们任意值的类型。
反射
- reflect:实现了运行时反射,允许程序操作任意类型的对象.
runtime
runtime包
包含了许多函数和类型用于访问Go的运行时系统。这里面的大多数都是高级功能,在日常创建标准Go程序时不应该使用到这些功能。但是,一 些包中的常量可能十分有用 – 例如,字符串runtime.GOOS(其值例如,"darwin," "freebsd," "linux," 或 "windows")和字符串runtime.GOARCH(其值例如386," "amd64,"或 "arm")。runtime.GOROOT()函数返回GOROOT环境变量的值(或者如果该环境变量没有设置,返回Go构建根目 录),runtime.Version()返回Go版本(以一个字符串形式)。runtime.GOMAXPROCS()和 runtime.NumCPU()函数保证Go使用机器的所有处理器,在Go的文档中有详尽解释。
Go运行时
- runtime TODO(osc): 需更新 runtime 包含与Go的运行时系统进行交互的操作,例如用于控制Go程的函数.
- cgo:含有 cgo 工具生成的代码的运行时支持.
- debug:含有程序在运行时调试其自身的功能.
- pprof:按照可视化工具 pprof 所要求的格式写出运行时分析数据.
- race:实现了数据竞争检测逻辑.
并发
- sync sync 包提供了互斥锁这类的基本的同步原语.
- atomic atomic 包提供了底层的原子性内存原语,这对于同步算法的实现很有用.
测试
- testing Package testing provides support for automated testing of Go packages.
- iotest Package iotest implements Readers and Writers useful mainly for testing.
- quick Package quick implements utility functions to help with black box testing.
time包
提供了用于测量时间、解析和格式化日期,日期/时间以及时间值的函数。time.After()函数可用于在特定纳秒后,向通道 (channel)发送当前时间。time.Tick()和time.NewTicker()函数可用于提供一个通道,它会返回在特定时间间隔后将 'tick'发送到该通道上。time.Time结构具有一些方法,可提供当前时间,将data/time格式化为一个字符串以及解析data /time。
时间处理
- time:提供了时间的显示和测量用的函数.
unsafe
- unsafe:含有关于Go程序类型安全的所有操作.
Go相关开发与调试
- builtin builtin 包为Go的预声明标识符提供了文档.
debug
dwarf Package dwarf provides access to DWARF debugging information loaded from executable files, as defined in the DWARF 2.0 Standard at http://dwarfstd.org/doc/dwarf-2.0.0.pdf
elf Package elf implements access to ELF object files.
gosym Package gosym implements access to the Go symbol and line number tables embedded in Go binaries generated by the gc compilers.
macho Package macho implements access to Mach-O object files.
pe Package pe implements access to PE (Microsoft Windows Portable Executable) files.
plan9obj Package plan9obj implements access to Plan 9 a.out object files.
errors error 包实现了用于错误处理的函数. expvar expvar包提供了公共变量的标准接口,如服务的操作计数器. go ast Package ast declares the types used to represent syntax trees for Go packages. build Package build gathers information about Go packages. doc Package doc extracts source code documentation from a Go AST. format Package format implements standard formatting of Go source. parser Package parser implements a parser for Go source files. printer Package printer implements printing of AST nodes. scanner Package scanner implements a scanner for Go source text. token Package token defines constants representing the lexical tokens of the Go programming language and basic operations on tokens (printing, predicates).
exp包(试验性的)是那些未来可能被加入标准库的包起步的地方,因此除非你想参加这些包的开发(通过测试、讨论、提交补丁),否则不应该使用其 下面的包。exp包通常只存在于从Google Go源码树上签出的源码包中,但一般不会包含在预构建好的包中。其他包可以放心使用,虽然在写下本文的这一刻,很多包依旧不够完整。