超详细Go语言源码目录说明
开源项目「go home」聚焦Go语言技术栈与面试题,以协助Gopher登上更大的舞台,欢迎
go home~
导读
学习Go语言源码的第一步就是了解先了解它的目录结构,你对它的源码目录了解多少呢?今天我整理了一份超详细的Go语言源码目录说明,基于Go1.14版本整理,欢迎收藏~
目录总览
.
├── AUTHORS
├── CONTRIBUTING.md
├── CONTRIBUTORS
├── LICENSE
├── PATENTS
├── README.boringcrypto.md
├── README.md
├── SECURITY.md
├── api
├── doc
├── favicon.ico
├── lib
├── misc
├── robots.txt
├── src
└── test
6 directories, 10 files
- AUTHORS:Golang官方作者清单
- CONTRIBUTING.md:加入贡献者队列的指导文件
- CONTRIBUTORS:第三方贡献者清单
- LICENSE:授权协议
- PATENTS:专利
- README.boringcrypto.md:因为Golang是Google发布的,这是针对Google内部研究分支的说明
- README.md:说明文件,大家都明白,每个开源库都有
- SECURITY.md:安全政策
- api:Golang每个版本的功能列表归档文件,下面有具体介绍
- doc:Golang文档说明,和官方文档相同,可以离线查看
- favicon.ico:浏览器页签左边的图标,一般放在网站根目录,就长这样

- lib:看起来像是库文档模板,里面列举了time包的说明
- misc:汇集了Go语言相关的IDE、插件、cgo测试程序、示例等乱七八糟的东西
- robots.txt:主要用来控制各大搜索引擎爬虫的爬取规则
- src:Golang核心实现都在这里,下面详细讲述
- test:Golang单元测试程序,通过查看测试程序可以学习到golang的用法和特性
目录延伸
api
该目录中的每个文件都是Go语言API列表,每行一个,方便IDE使用。
.
├── README
├── except.txt
├── go1.1.txt
├── go1.10.txt
├── go1.11.txt
├── go1.12.txt
├── go1.13.txt
├── go1.14.txt
├── go1.2.txt
├── go1.3.txt
├── go1.4.txt
├── go1.5.txt
├── go1.6.txt
├── go1.7.txt
├── go1.8.txt
├── go1.9.txt
├── go1.txt
└── next.txt
0 directories, 18 files
- README:说明文件,里面有对该目录下文件作用的说明
- except.txt:列举了接下来可能会废弃的API,但是并不影响兼容问题
- go*.txt:囊括了每个版本的API列表,文件内容只增不减,版本发布后就归档不再改动
- next.txt:列举了未来的版本可能实现的新功能
src
archive
归档文件处理库,可以用来处理tar与zip类型文件。
bufio
主要用于文本的读取写入,对io.Reader和io.Writer进行了实现和封装,提供了比较便利的方法操作文件。
builtin
定义了常用了内置类型、函数和接口,比如make、new、len、error等。
bytes
定义了用来操作字节的函数。
cmd
提供了Go语言的基本工具,比如我们常用的代码格式化工具gofmt、静态检查工具vet等。
.
├── README.vendor
├── addr2line
├── api
├── asm
├── buildid
├── cgo
├── compile
├── cover
├── dist
├── doc
├── fix
├── go
├── go.mod
├── go.sum
├── gofmt
├── internal
├── link
├── nm
├── objdump
├── pack
├── pprof
├── test2json
├── trace
├── vendor
└── vet
22 directories, 3 files
下面列举出几个比较常用的工具:
- addr2line:因为linux上才支持这个命令,所以这里做了一个模拟器,用来支持pprof的
- objdump:跟addr2line作用一样,这是linux中该命令的模拟实现,用来支持pprof
- api:用于生成Go语言API列表,也就是上面提到的api目录下的go*.txt文件
- asm:汇编器,将源文件汇编为目标文件
- buildid:用来更新库或二进制文件中构建的标识
- cgo:支持创建调用C代码的包
- compile:编译工具
- go:我们经常用的go命令,管理源代码工具
- godoc:用于提取并生成Go程序文档
- gofmt:代码格式化工具
- pack:备份压缩工具,是unix系统中ar工具的简单实现,它可以将多个文件打包为一个备存文件
- link:连接器
- vet:代码静态检查工具
- dist:是一个引导程序,负责构建Go语言的其他工具
- fix:用来找到使用旧API的程序,然后更新为新的API
- cover:用来分析单元测试覆盖率的工具
- inernal:一些内部通用实现,被其他包调用
- nm:列出了由目标文件,归档文件或可执行文件定义或使用的符号
- pprof:Go程序的性能分析工具
- vendor:Go语言包依赖工具
- test2json:将Go测试程序的输出转换为机器可读的JSON流
- trace:用来跟踪分析goroutines运行调度状态等功能的工具,比pprof更加细粒度
compress
压缩、解压工具,支持bzip2、flate、gzip、lzw、zlib等格式。
container
提供了双向链表(list)、堆(heap)、环形联表(ring)的数据结构的操作。
context
通常在goroutine切换执行时,需要知道相关状态信息才能执行,而这些信息就被封装在context中,它的使用在Go语言中十分广泛。
crypto
封装了很多加解密算法,比如rsa、sha1、aes、md5等函数。
database
提供了各种数据库的通用API,比如SQLite、MySQL、Postgres。
debug
支持Go程序调试。
encoding
封装了各类编码的实现,比如base64、json、xml、hex等。
.
├── ascii85
├── asn1
├── base32
├── base64
├── binary
├── csv
├── encoding.go
├── gob
├── hex
├── json
├── pem
└── xml
11 directories, 1 file
errors
是我们经常使用的错误函数,也可以自定义。
expvar
提供了一系列标准接口,可以通过HTTP的方式将服务器的变量以JSON格式打印出来。
flag
解析处理命令行参数的工具。
fmt
封装了各种格式化输出方法。
go
hash
封装了crc32、crc64在内的哈希函数。
html
HTML模板引擎,可以将代码与HTML混合在一起,它会负责解析转义,类似python的jinja、php的smarty等。
image
一般语言都会有的图像处理库。
index
用来实现字符串高速匹配查找。
internal
internal专门用来控制包导入权限的,以internal命名的包只允许它父级和父级的子级目录导入。
.
|-- checker
| |-- internal
| | |-- cpu
| | | `-- cpu.go
| | `-- ram
| | `-- ram.go
| `-- server.go
|-- go.mod
|-- go.sum
`-- main.go
如上代码,checker/internal/cpu和checker/internal/ram只能被checker包及其子包中的代码导入,不能被main.go导入,否则会报错。
io
为文件I/O提供了一些基本的接口,bufio就对它进行了实现。
log
封装了日志记录方法,比如log.Fatal、log.Print等。
math
封装了基本的数学相关的函数。
mime
封装了MIME类型的解析,MIME是媒体类型,比如文档、文件、字节流性质的格式。
net
封装了各种网络IO的函数,比如TCP、UDP、Socket等。
os
封装了用来操作操作系统的命令,比如调用exec可以执行shell脚本等,当然它支持不同平台的操作。
path
实现了用于处理斜杠分隔符路径的函数。
plugin
Go1.8版本以后提供的插件机制,可以动态地加载动态链接库文件.so,这样对外发布动态链接库就不需要把源码给到对方进行编译了。
reflect
封装反射读取方法,比如读取结构体的方法、属性等。
regexp
封装了正则表达式的实现。
runtime
包含了Go运行时的操作,这块水很深,这里目前不再展开陈述。
sort
封装了部分排序算法。
strconv
封装了基础类型与字符串互相转换的方法,比如int转string,反之亦然。
strings
封装了字符串操作的相关方法。
sync
封装了基本的同步机制,各种锁的实现。
syscall
封装了一系列系统调用的接口。
testing
为Go语言测试程序提供支持。
text
封装了文本处理相关的方法,比如文本扫描或文本标签过滤器等。
time
封装了时间处理相关的函数,比如获取当前时间,计算时间差等。
unicode
封装了utf8、utf16的编解码方法。
unsafe
用于一些不安全的操作场景,比如正常情况下,指向不同类型数据的指针是无法互相转换的,但是就可以用unsafe的Pointer方法来实现,所以应该要谨慎使用。
感谢大家的观看,如果觉得文章对你有所帮助,欢迎关注公众号「平也」,聚焦Go语言与技术原理。

超详细Go语言源码目录说明的更多相关文章
- 超详细的Eureka源码解析
Eureka简介 Eureka是什么? Eureka是基于REST(Representational State Transfer)服务,主要以AWS云服务为支撑,提供服务发现并实现负载均衡和故障转移 ...
- 超详细的Ribbon源码解析
Ribbon简介 什么是Ribbon? Ribbon是springcloud下的客户端负载均衡器,消费者在通过服务别名调用服务时,需要通过Ribbon做负载均衡获取实际的服务调用地址,然后通过http ...
- android 源码目录介绍
Android 4.0源码目录介绍|-- Makefile|-- bionic (bionic C库)|-- bootable (启动引导相关代码)|-- build (存放系统编译规则及gener ...
- 【安卓本卓】Android系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介
前言 古人常说,“熟读唐诗三百首,不会作诗也会吟”,说明了大量阅读诗歌名篇对学习作诗有非常大的帮助.做开发也一样,Android源码是全世界最优秀的Android工程师编写的代码,也是A ...
- Android系统架构与系统源码目录
前言 技术博客终于可以恢复正常的更新速度了,原因是我编写的进阶书籍的初稿已经完成,窃以为它将会是Android应用书籍中最有深度的一本,可以说是<Android开发艺术探索>的姊妹篇.在这 ...
- InfluxDB源码目录结构解析
操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 influxdata主目录结构 [root@localhost ...
- (转)android系统架构及源码目录结构
转自:http://blog.csdn.net/finewind/article/details/46324507 1. Android系统架构: android系统架构采用了分层架构的思想,如下图所 ...
- [py]python的继承体系-源码目录结构
python3安装目录 pip install virtualenv pip install virtualenvwrapper pip install virtualenvwrapper-win m ...
- Syncthing源码解析 - 源码目录说明!
Syncthing是一个免费开源的p2p软件,Go语言编写的! 官网:https://syncthing.net/ 源码:https://github.com/syncthing/syncthing/ ...
随机推荐
- 【Weiss】【第03章】练习3.16:删除相同元素
[练习3.16] 假设我们有一个基于数组的表A[0,1...N-1],并且我们想删除所有相同的元素. LastPosition初始值为N-1,但应该随着相同元素被删除而变得越来越小. 考虑图3-61中 ...
- React Native实现短信转发到微信上
缘由 都说需求来源于生活我为什么会有一个这么奇葩的需求呢?来看一个故事. 昨天为了省点手续费导航走了3公里多去找一家工行ATM机(没办法穷)然后到了以后发现ATM机在人家的园区里面,现在疫情进入要通行 ...
- 2. weddriver的定位方法
一. find_element_by_****的方式 首页在网页上鼠标右键选择检查并点击,查看需要定位的元素. https://www.baidu.com 以百度为例 导入模块的: from sel ...
- (数据科学学习手札80)用Python编写小工具下载OSM路网数据
本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们平时在数据可视化或空间数据分析的过程中经常会 ...
- 常用正则表达式(手机号、邮箱、URL地址、身份证等等)
一.前言 不好的习惯:1.每一次用到正则都是上网copy一份,也没有去学习思考,看看都是什么意思: 2.一个项目里不同的地方用到了相同的校验,一直在重复的copy代码,并没有统一起来,万一哪天要修改规 ...
- 动态规划-01背包-Tallest Billboard
2020-02-07 17:46:32 问题描述: 问题求解: 解法一:BF 看问题规模看似可以直接暴力解决. 如果直接去解肯定是会超时的,因为每次将原空间划分成A区域,B区域和剩余区域的时间复杂度为 ...
- 动态规划-Minimum Distance to Type a Word Using Two Fingers
2020-01-12 18:28:13 问题描述: 问题求解: 本题还是非常困难的,至少我在看到这个题目的时候是没有想到怎么解决的.我当时联想到的题目是那条grid走两遍的题目,那条题目也很麻烦,使用 ...
- tf.contrib.legacy_seq2seq.basic_rnn_seq2seq 函数 example 最简单实现
tf.contrib.legacy_seq2seq.basic_rnn_seq2seq 函数 example 最简单实现 函数文档:https://www.tensorflow.org/api_doc ...
- 洛谷 P2656 采蘑菇 树形DP+缩点+坑点
题目链接 https://www.luogu.com.cn/problem/P2656 分析 这其实是个一眼题(bushi 发现如果没有那个恢复系数,缩个点就完了,有恢复系数呢?你发现这个恢复系数其实 ...
- coding++:Semaphore—RateLimiter-漏桶算法-令牌桶算法
java中对于生产者消费者模型,或者小米手机营销 1分钟卖多少台手机等都存在限流的思想在里面. 关于限流 目前存在两大类,从线程个数(jdk1.5 Semaphore)和RateLimiter速率(g ...