下面罗列了所有的Go语言源码包,以及各个包的职责,并且加粗我们日常开发使用最频繁的包,需要我们重点研究源码并理解
- archive
- archive/tar tar包实现了tar格式压缩文件的存取
- archive/zip zip包提供了zip档案文件的读写服务
- bufio (bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。)--重要
- builtin (builtin 包为Go的预声明标识符提供了文档。此处列出的条目其实并不在builtin 包中,对它们的描述只是为了让 godoc 给该语言的特殊标识符提供文档。)--重要
- bytes (bytes包实现了操作[]byte的常用函数)--非常重要
- compress (压缩数据的读写)
- bzip2包实现bzip2的解压缩。
- flate包实现了deflate压缩数据格式
- gzip包实现了gzip格式压缩文件的读写
- lzw包实现了Lempel-Ziv-Welch数据压缩格式
- zlib包实现了对zlib格式压缩数据的读写
- container (常用数据结构 list,ring)
- heap包提供了对任意类型(实现了heap.Interface接口)的堆操作
- list包实现了双向链表
- ring实现了环形链表的操作
- context (提供上下文操作的相关支持 )--非常重要
- crypto 包搜集了常用的密码(算法)常量
- aes包实现了AES加密算法
- cipher包实现了多个标准的用于包装底层块加密算法的加密算法实现。
- des包实现了DES标准和TDEA算法
- dsa包实现FIPS 186-3定义的数字签名算法
- ecdsa包实现了椭圆曲线数字签名算法
- elliptic包实现了几条覆盖素数有限域的标准椭圆曲线。
- hmac包实现了U.S. Federal Information Processing Standards Publication 198规定的HMAC(加密哈希信息认证码
- md5包实现了MD5哈希算法
- rand包实现了用于加解密的更安全的随机数生成器
- rc4包实现了RC4加密算法,参见Bruce Schneier's Applied Cryptography。
- rsa包实现了PKCS#1规定的RSA加密算法。
- sha1包实现了SHA1哈希算法
- sha256包实现了SHA224和SHA256哈希算法
- sha512包实现了SHA384和SHA512哈希算法
- tls包实现了TLS 1.2
- x509包解析X.509编码的证书和密钥。
- pkix包提供了共享的、低层次的结构体,用于ASN.1解析和X.509证书、CRL、OCSP的序列化。
- database (数据库驱动实现)
- database/sql sql包提供了保证SQL或类SQL数据库的泛用接口
- database/sql/driver driver包定义了应被数据库驱动实现的接口,这些接口会被sql包使用。绝大多数代码应使用sql包。
- debug (debug工具)
- elf 实现访问 ELF 对象文件
- gosym实现了对gc编译器生成的Go二进制文件中嵌入的Go符号和行号表的访问
- macho实现对Mach-O对象文件的访问
- pe 实现对pe(Microsoft Windows可移植可执行文件)文件的访问
- plan9obj 实现对Plan 9 a.out对象文件的访问
- encoding 包定义了供其它包使用的可以将数据在字节水平和文本表示之间转换的接口
- ascii85 包实现了ascii85数据编码(5个ascii字符表示4个字节),该编码用于btoa工具和Adobe的PostScript语言和PDF文档格式。
- asn1 包实现了DER编码的ASN.1数据结构的解析
- base32 包实现了RFC 4648规定的base32编码
- base64 实现了RFC 4648规定的base64编码。
- binary 包实现了简单的数字与字节序列的转换以及变长值的编解码。
- csv 读写逗号分隔值(csv)的文件
- gob 包管理gob流——在编码器(发送器)和解码器(接受器)之间交换的binary值。一般用于传递远端程序调用(RPC)的参数和结果,如net/rpc包就有提供
- hex 包实现了16进制字符表示的编解码
- json 包实现了json对象的编解码,参见RFC 4627。Json对象和go类型的映射关系请参见Marshal和Unmarshal函数的文档。
- pem 包实现了PEM数据编码(源自保密增强邮件协议)。目前PEM编码主要用于TLS密钥和证书
- xml 实现了一个简单的xml 1.0解析器,它可以理解xml名称空间
- errors 包实现了创建错误值的函数。--非常重要
- expvar 包提供了公共变量的标准接口,如服务的操作计数器。本包通过HTTP在/debug/vars位置以JSON格式导出了这些变量。对这些公共变量的读写操作都是原子级的
- flag 包实现了命令行参数的解析。
- fmt (包实现了类似C语言printf和scanf的格式化I/O。格式化动作('verb')源自C语言但更简单)--非常重要
- hash (hash包提供hash函数的接口。)
- adler32包实现了Adler-32校验和算法。
- crc32包实现了32位循环冗余校验(CRC-32)的校验和算法
- crc64实现64位循环冗余校验
- fnv包实现了FNV-1和FNV-1a(非加密hash函数)
- html包提供了用于转义和解转义HTML文本的函数
- template包(html/template)实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。本包提供了和text/template包相同的接口,无论何时当输出是HTML的时候都应使用本包。
- image (image实现了基本的2D图片库。基本接口叫作Image。图片的色彩定义在image/color包。)
- color包实现了基本色彩库。
- palette包提供了标准的调色板。
- draw包提供了图像合成函数
- gif包实现了gif文件的编码器和解码器
- jpeg包实现了jpeg格式图像的编解码。
- png包实现了PNG图像的编解码
- index/suffixarrayb包通过使用内存中的后缀树实现了对数级时间消耗的子字符串搜索
- io (提供了对I/O原语的基本接口。本包的基本任务是包装这些原语已有的实现(如os包里的原语),使之成为共享的公共接口,这些公共接口抽象出了泛用的函数并附加了一些相关的原语的操作)--非常重要
- io/ioutil实现了一些I/O实用程序功能--非常重要
- log (log包实现了简单的日志服务。本包定义了Logger类型,该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”Logger,可以通过辅助函数Print[f|ln]、Fatal[f|ln]和Panic[f|ln]访问,比手工创建一个Logger对象更容易使用)--非常重要
- log/syslog 包提供一个简单的系统日志服务的接口,它可以使用UNIX域套接字、UDP或TCP向syslog守护进程发送消息
- math (math包提供了基本的数学常数和数学函数。)--非常重要
- big包实现了大数字的多精度计算。 支持如下数字类型:
- cmplx包提供了复数的常用常数和常用函数
- rand包实现了伪随机数生成器
- mime 实现了MIME的部分规定。
- net (net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。虽然本包提供了对网络原语的访问,大部分使用者只需要Dial、Listen和Accept函数提供的基本接口;以及相关的Conn和Listener接口)--非常重要
- http包提供了HTTP客户端和服务端的实现。--重要
- http/cgi包实现了CGI(Common Gateway Interface,公共网关协议)
- http/httptest包提供了HTTP测试的常用函数。
- http/httptrace提供了跟踪HTTP客户端请求中的事件的机制。
- cookiejar包实现了保管在内存中的符合RFC 6265标准的http.CookieJar接口。
- httputil包提供了HTTP公用函数,是对net/http包的更常见函数的补充。--重要
- pprof包通过它的HTTP服务端提供pprof可视化工具期望格式的运行时剖面文件数据服务。关于pprof的更多信息,参见http://code.google.com/p/google-perftools/。
- mail包实现了邮件的解析。
- rpc包提供了通过网络或其他I/O连接对一个对象的导出方法的访问。服务端注册一个对象,使它作为一个服务被暴露,服务的名字是该对象的类型名。注册之后,对象的导出方法就可以被远程访问。服务端可以注册多个不同类型的对象(服务),但注册具有相同类型的多个对象是错误的。
- jsonrpc包实现了JSON-RPC的ClientCodec和ServerCodec接口,可用于rpc包。
- smtp包实现了简单邮件传输协议(SMTP)
- textproto实现了对基于文本的请求/回复协议的一般性支持,包括HTTP、NNTP和SMTP。
- url 解析url并实现查询转义
- os (os包提供了操作系统函数的不依赖平台的接口)--重要
- exec包执行外部命令。它包装了os.StartProcess函数以便更容易的修正输入和输出,使用管道连接I/O,以及作其它的一些调整。
- signal包实现了对输入信号的访问
- user包允许通过名称或ID查询用户帐户。
- path (path实现了对斜杠分隔的路径的实用操作函数)--重要
- filepath包实现了兼容各操作系统的文件路径的实用操作函数。--重要
- plugin (实现Go插件的加载和符号解析)
- reflect (reflect包实现了运行时反射,允许程序操作任意类型的对象)--非常重要
- regexp (egexp包实现了正则表达式搜索。正则表达式采用RE2语法(除了\c、\C),和Perl、Python等语言的正则基本一致。)--非常重要
- runtime (runtime包提供和go运行时环境的互操作,如控制go程的函数。它也包括用于reflect包的低层次类型信息;参见reflect报的文档获取运行时类型系统的可编程接口。)
- cgo 包含有 cgo 工具生成的代码的运行时支持
- debug 包含程序在运行时进行自我调试的工具。
- pprof包以pprof可视化工具期望的格式书写运行时剖面数据。
- race包实现了数据竞争检测逻辑。
- sort (sort包提供了排序切片和用户自定义数据集的函数。)--非常重要
- strconv (strconv包实现了基本数据类型和其字符串表示的相互转换。)--非常重要
- strings (strings包实现了用于操作字符的简单函数。)--非常重要
- sync (sync包提供了基本的同步基元,如互斥锁。除了Once和WaitGroup类型,大部分都是适用于低水平程序线程,高水平的同步使用channel通信更好一些。)--非常重要
- atomic包提供了底层的原子级内存操作,对于同步算法的实现很有用。这些函数必须谨慎地保证正确使用。除了某些特殊的底层应用,使用通道或者sync包的函数/类型实现同步更好。--重要
- syscall (包含一个到低级操作系统原语的接口)
- testing (testing 提供对 Go 包的自动化测试的支持。通过 `go test` 命令,能够自动执行如下形式的任何函数:)--重要
- iotest实现了主要用于测试的读写器
- quick实现实用程序功能,以帮助进行黑盒测试
- text
- scanner包提供对utf-8文本的token扫描服务。它会从一个io.Reader获取utf-8文本,通过对Scan方法的重复调用获取一个个token
- tabwriter包实现了写入过滤器(tabwriter.Writer),可以将输入的缩进修正为正确的对齐文本
- template包实现了数据驱动的用于生成文本输出的模板
- text/template和html/template定义的模板构建解析树。客户端应该使用这些包来构建模板,而不是使用此包,因为此包提供了不用于一般用途的共享内部数据结构。
- timetime(包提供了时间的显示和测量用的函数。日历的计算采用的是公历。)--非常重要
- unicode(unicode包提供数据和函数来测试Unicode代码点的一些属性。)--重要
- utf16包实现了UTF-16序列的编解码。
- utf8包实现了对utf-8文本的常用函数和常数的支持,包括rune和utf-8编码byte序列之间互相翻译的函数。--重要
- unsafe (unsafe包提供了一些跳过go语言类型安全限制的操作。)