01.Golang 源码目录结构

Golang 源码目录结构

目录总览

bash 复制代码
├── README.md #说明文件
├── SECURITY.md #安全政策
├── api #Golang每个版本的功能列表归档文件
├── doc #Golang文档说明,和官方文档相同,可以离线查看
├── lib #像是库文档模板,里面列举了time包的说明
├── misc #其他的一些工具,相当于大杂烩,大部分是各种编辑器的Go语言支持,还有cgo的例子等
├── src #Golang核心实现:基本工具(编译器等)、标准库
└── test #包含很多测试程序(并非_test.go方式的单元测试,而是包含main包的测试),包括一些fixbug测试,通过查看测试程序可以学习到golang的用法和特性

api

该目录中的每个文件都是 Go 语言 API 列表,每行一个,方便 IDE 使用。

python 复制代码
├── except.txt
├── go1.1.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.10.txt
├── go1.11.txt
├── go1.12.txt
├── go1.13.txt
├── go1.14.txt
├── go1.15.txt
├── go1.16.txt
├── go1.17.txt
├── go1.18.txt
├── go1.19.txt
├── go1.20.txt
├── go1.21.txt
├── go1.22.txt
├── go1.23.txt
├── go1.txt
├── next
└── README
  • README:说明文件,里面有对该目录下文件作用的说明
  • except.txt:列举了接下来可能会废弃的 API,但是并不影响兼容问题
  • go*.txt:囊括了每个版本的 API 列表,文件内容只增不减,版本发布后就归档不再改动
  • next:目录只包含要修改的文件,该目录中的每个文件都包含可以添加的特性列表到Go的下一个版本

src

中文版核心库代码解释

bash 复制代码
├── archive #压缩 (解压缩) 文件功能。
├── bufio #主要用于文本的读取写入,对io.Reader和io.Writer进行了实现和封装,提供了比较便利的方法操作文件。
├── builtin #定义了常用了内置类型、函数和接口,比如make、new、len、error等。
├── bytes #定义了用来操作字节的函数。
├── cmd #提供了Go语言的基本工具,比如我们常用的代码格式化工具gofmt、静态检查工具vet等。
├── compress #压缩、解压工具,支持bzip2、flate、gzip、lzw、zlib等格式。
├── constraints #约束定义了一组与类型参数一起使用的有用约束。
├── container  #提供了双向链表(list)、堆(heap)、环形联表(ring)的数据结构的操作。
├── context #通常在goroutine切换执行时,需要知道相关状态信息才能执行,而这些信息就被封装在context中,它的使用在Go语言中十分广泛。
├── crypto #封装了很多加解密算法,比如rsa、sha1、aes、md5等函数。
├── database #提供了各种数据库的通用API,比如SQLite、MySQL、Postgres。
├── debug #支持Go程序调试。
├── embed  #包嵌入提供了对正在运行的 Go 程序中嵌入的文件的访问。
├── encoding #封装了各类编码的实现,比如base64、json、xml、hex等。
├── errors #是我们经常使用的错误函数,也可以自定义。
├── expvar #提供了一系列标准接口,可以通过HTTP的方式将服务器的变量以JSON格式打印出来。
├── flag #解析处理命令行参数的工具。
├── fmt #封装了各种格式化输出方法。
├── go
├── hash #封装了crc32、crc64在内的哈希函数。
├── html #HTML模板引擎,可以将代码与HTML混合在一起,它会负责解析转义,类似python的jinja、php的smarty等。
├── image #一般语言都会有的图像处理库。
├── index #用来实现字符串高速匹配查找。
├── internal #internal专门用来控制包导入权限的,以internal命名的包只允许它父级和父级的子级目录导入。
├── io #为文件I/O提供了一些基本的接口,bufio就对它进行了实现。
├── log #封装了日志记录方法,比如log.Fatal、log.Print等。
├── math #封装了基本的数学相关的函数。
├── math/big: 大数的实现和计算。   
├── mime #封装了MIME类型的解析,MIME是媒体类型,比如文档、文件、字节流性质的格式。
├── net #封装了各种网络IO的函数,比如TCP、UDP、Socket等。
├── os #提供给我们一个平台无关性的操作系统功能接口,采用类 Unix 设计,隐藏了不同操作系统间差异,让不同的文件系统和操作系统对象表现一致。
├── 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方法来实现,所以应该要谨慎使用。
└── vendor

cmd

perl 复制代码
├── addr2line #因为linux上才支持这个命令,所以这里做了一个模拟器,用来支持pprof的
├── api #用于生成Go语言API列表
├── asm #汇编器,将源文件汇编为目标文件
├── buildid #用来更新库或二进制文件中构建的标识
├── cgo #支持创建调用C代码的包
├── compile #编译工具
├── cover #用来分析单元测试覆盖率的工具
├── dist #是一个引导程序,负责构建Go语言的其他工具
├── doc #用于提取并生成Go程序文档
├── fix #用来找到使用旧API的程序,然后更新为新的API
├── go #我们经常用的go命令,管理源代码工具
├── gofmt #代码格式化工具
├── internal #一些内部通用实现,被其他包调用
├── link #连接器
├── nm #列出了由目标文件,归档文件或可执行文件定义或使用的符号
├── objdump #跟addr2line作用一样,这是linux中该命令的模拟实现,用来支持pprof
├── pack #备份压缩工具,是unix系统中ar工具的简单实现,它可以将多个文件打包为一个备存文件
├── pprof #Go程序的性能分析工具
├── README.vendor
├── test2json #将Go测试程序的输出转换为机器可读的JSON流
├── trace #用来跟踪分析goroutines运行调度状态等功能的工具,比pprof更加细粒度
├── vendor #Go语言包依赖工具
├── go.mod
├── go.sum
└── vet #代码静态检查工具

runtime

bash 复制代码
|── alg.c     Type结构体中的alg,类型操作。
|── append_test.go
|── arch_386.h
|── arch_amd64.h
|── arch_arm.h
|── asm_386.s     
|── asm_amd64.s
|── asm_arm.s
|── atomic_386.c
|── atomic_amd64.c
|── atomic_arm.c
|── callback_windows_386.c
|── callback_windows_amd64.c
|── cgo
|   ├── asm_386.s
|   ├── asm_amd64.s
|   ├── asm_arm.s
|   ├── callbacks.c
|   ├── cgo.go
|   ├── cgo_arm.c
|   ├── freebsd.c
|   ├── gcc_386.S
|   ├── gcc_amd64.S
|   ├── gcc_arm.S
|   ├── gcc_darwin_386.c
|   ├── gcc_darwin_amd64.c
|   ├── gcc_freebsd_386.c
|   ├── gcc_freebsd_amd64.c
|   ├── gcc_freebsd_arm.c
|   ├── gcc_linux_386.c
|   ├── gcc_linux_amd64.c
|   ├── gcc_linux_arm.c
|   ├── gcc_netbsd_386.c
|   ├── gcc_netbsd_amd64.c
|   ├── gcc_netbsd_arm.c
|   ├── gcc_openbsd_386.c
|   ├── gcc_openbsd_amd64.c
|   ├── gcc_setenv.c
|   ├── gcc_util.c
|   ├── gcc_windows_386.c
|   ├── gcc_windows_amd64.c
|   ├── iscgo.c
|   ├── libcgo.h
|   ├── netbsd.c
|   ├── openbsd.c
|   └── setenv.c
|── cgocall.c
|── cgocall.h
|── chan.c     通道的实现
|── compiler.go
|── complex.c
|── cpuprof.c     pprof相关
|── debug
|   ├── debug.c
|   ├── garbage.go
|   ├── garbage_test.go
|   ├── stack.go
|   └── stack_test.go
|── debug.go
|── defs1_linux.go
|── defs2_linux.go
|── defs_arm_linux.go
|── defs_darwin.go
|── defs_darwin_386.h
|── defs_darwin_amd64.h
|── defs_freebsd.go
|── defs_freebsd_386.h
|── defs_freebsd_amd64.h
|── defs_freebsd_arm.h
|── defs_linux.go
|── defs_linux_386.h
|── defs_linux_amd64.h
|── defs_linux_arm.h
|── defs_netbsd.go
|── defs_netbsd_386.go
|── defs_netbsd_386.h
|── defs_netbsd_amd64.go
|── defs_netbsd_amd64.h
|── defs_netbsd_arm.go
|── defs_netbsd_arm.h
|── defs_openbsd.go
|── defs_openbsd_386.h
|── defs_openbsd_amd64.h
|── defs_plan9_386.h
|── defs_plan9_amd64.h
|── defs_windows.go
|── defs_windows_386.h
|── defs_windows_amd64.h
|── env_plan9.c
|── env_posix.c
|── error.go
|── extern.go
|── float.c
|── gc_test.go
|── hashmap.c     map容器的底层实现
|── hashmap.h
|── hashmap_fast.c
|── iface.c     interface的底层实现
|── lfstack.c     垃圾回收中用到了这个文件,lock free stack的缩写。垃圾回收中,利用来实现PtrBuffer的并发安全性
|── lock_futex.c
|── lock_sema.c
|── malloc.goc     malloc相关的封装,提供了runtime.mallocgc
|── malloc.h
|── malloc1.go
|── mallocrand.go
|── mallocrep.go
|── mallocrep1.go
|── mcache.c    内存管理实现相关,MCache层次的数据结构和操作
|── mcentral.c     内存管理实现相关,MCentral层次的数据结构和操作
|── mem.go     内存信息统计
|── mem_darwin.c
|── mem_freebsd.c
|── mem_linux.c     内存分配相关,依赖于系统部分的分配函数。最下层接口,这里提供SysAlloc分配大块内存,提供runtime内存池使用
|── mem_netbsd.c
|── mem_openbsd.c
|── mem_plan9.c
|── mem_windows.c
|── memclr_arm.s
|── memmove_386.s
|── memmove_amd64.s
|── memmove_arm.s
|── memmove_linux_amd64_test.go
|── mfinal.c
|── mfinal_test.go
|── mfixalloc.c
|── mgc0.c     垃圾回收最核心的部分都是在这一个文件里实现的
|── mgc0.go
|── mgc0.h
|── mheap.c     内存管理实现相关,MHeap层次的数据结构和操作
|── mkversion.c
|── mprof.goc     pprof相关
|── msize.c
|── netpoll.goc
|── netpoll_epoll.c     封装了依赖到系统的epoll,对Go提供runtime.netpoll相关的函数
|── netpoll_kqueue.c
|── netpoll_stub.c
|── os_darwin.c
|── os_darwin.h
|── os_freebsd.c
|── os_freebsd.h
|── os_freebsd_arm.c
|── os_linux.c     goroutine相关,依赖于系统的部分。runtime.newosproc,runtime.minit等函数都在这里实现
|── os_linux.h
|── os_linux_386.c
|── os_linux_arm.c
|── os_netbsd.c
|── os_netbsd.h
|── os_netbsd_386.c
|── os_netbsd_amd64.c
|── os_netbsd_arm.c
|── os_openbsd.c
|── os_openbsd.h
|── os_plan9.c
|── os_plan9.h
|── os_plan9_386.c
|── os_plan9_amd64.c
|── os_windows.c
|── os_windows.h
|── os_windows_386.c
|── os_windows_amd64.c
|── panic.c
|── parfor.c     垃圾回收相关,提供了并行方面的支持
|── pprof
|   ├── pprof.go
|   └── pprof_test.go
|── print.c
|── proc.c         goroutine调度器
|── proc.p
|── proc_test.go
|── race
|   ├── README
|   ├── doc.go
|   ├── race.go
|   ├── race_darwin_amd64.syso
|   ├── race_linux_amd64.syso
|   ├── race_test.go
|   ├── race_windows_amd64.syso
|   └── testdata
|       ├── atomic_test.go
|       ├── cgo_test.go
|       ├── cgo_test_main.go
|       ├── chan_test.go
|       ├── comp_test.go
|       ├── finalizer_test.go
|       ├── io_test.go
|       ├── map_test.go
|       ├── mop_test.go
|       ├── mutex_test.go
|       ├── regression_test.go
|       ├── rwmutex_test.go
|       ├── select_test.go
|       ├── slice_test.go
|       ├── sync_test.go
|       └── waitgroup_test.go
|── race.c
|── race.go
|── race.h
|── race0.c
|── race_amd64.s
|── rt0_darwin_386.s
|── rt0_darwin_amd64.s
|── rt0_freebsd_386.s
|── rt0_freebsd_amd64.s
|── rt0_freebsd_arm.s
|── rt0_linux_386.s
|── rt0_linux_amd64.s     生成可执行文件的入口,包括main函数等
|── rt0_linux_arm.s
|── rt0_netbsd_386.s
|── rt0_netbsd_amd64.s
|── rt0_netbsd_arm.s
|── rt0_openbsd_386.s
|── rt0_openbsd_amd64.s
|── rt0_plan9_386.s
|── rt0_plan9_amd64.s
|── rt0_windows_386.s
|── rt0_windows_amd64.s
|── rune.c
|── runtime-gdb.py
|── runtime.c
|── runtime.h     几乎大部分的数据结构都是在这个文件中定义的
|── runtime1.goc
|── runtime_linux_test.go
|── runtime_test.go
|── sema.goc
|── signal_386.c
|── signal_amd64.c
|── signal_arm.c
|── signal_darwin_386.h
|── signal_darwin_amd64.h
|── signal_freebsd_386.h
|── signal_freebsd_amd64.h
|── signal_freebsd_arm.h
|── signal_linux_386.h
|── signal_linux_amd64.h
|── signal_linux_arm.h
|── signal_netbsd_386.h
|── signal_netbsd_amd64.h
|── signal_netbsd_arm.h
|── signal_openbsd_386.h
|── signal_openbsd_amd64.h
|── signal_unix.c
|── signal_unix.h
|── signals_darwin.h
|── signals_freebsd.h
|── signals_linux.h
|── signals_netbsd.h
|── signals_openbsd.h
|── signals_plan9.h
|── signals_windows.h
|── sigqueue.goc
|── slice.c     slice的底层实现
|── softfloat64.go
|── softfloat64_test.go
|── softfloat_arm.c
|── stack.c     runtime.newstack函数是这里实现的
|── stack.h     这个文件里的注释很重要,讲了Go里使用的栈结构
|── string.goc
|── string_test.go
|── symtab.c
|── symtab_test.go
|── sys_darwin_386.s
|── sys_darwin_amd64.s
|── sys_freebsd_386.s
|── sys_freebsd_amd64.s
|── sys_freebsd_arm.s
|── sys_linux_386.s
|── sys_linux_amd64.s     封装了重要的系统调用,提供runtime.xx的函数,比如runtime.read
|── sys_linux_arm.s
|── sys_netbsd_386.s
|── sys_netbsd_amd64.s
|── sys_netbsd_arm.s
|── sys_openbsd_386.s
|── sys_openbsd_amd64.s
|── sys_plan9_386.s
|── sys_plan9_amd64.s
|── sys_windows_386.s
|── sys_windows_amd64.s
|── syscall_windows.goc
|── syscall_windows_test.go
|── time.goc
|── time_plan9_386.c
|── traceback_arm.c
|── traceback_x86.c
|── type.go
|── type.h         类型系统,里面有Type结构体的定义。interface以及reflect也依赖于这里一些东西
|── typekind.h     类型系统,提供了Type中的kind编号
|── vdso_linux_amd64.c
|── vlop_386.s
|── vlop_arm.s
|── vlop_arm_test.go
|── vlrt_386.c
|── vlrt_arm.c
|── zasm_darwin_amd64.h
|── zgoarch_amd64.go
|── zgoos_darwin.go
|── zmalloc_darwin_amd64.c
|── zmprof_darwin_amd64.c
|── znetpoll_darwin_amd64.c
|── zruntime1_darwin_amd64.c
|── zruntime_defs_darwin_amd64.go
|── zsema_darwin_amd64.c
|── zsigqueue_darwin_amd64.c
|── zstring_darwin_amd64.c
|── ztime_darwin_amd64.c
|── zversion.go

参考文章

超详细Go语言源码目录说明

附录B Go的源代码目录结构

【Go基础】Go源码目录必知

相关推荐
LuckyLay25 分钟前
Golang学习笔记_29——抽象工厂模式
笔记·学习·golang·抽象工厂模式
不亭25 分钟前
python自动化测试之Pytest断言及Allure报告定制
开发语言·python·pytest
txwtech29 分钟前
QT使用QAbstractTableModel 0x8读取访问权限冲突
开发语言·数据库·qt
.Net Core 爱好者30 分钟前
基于Flask搭建AI应用,本地私有化部署开源大语言模型
人工智能·后端·python·语言模型·自然语言处理·flask
柳鲲鹏35 分钟前
QT 5.15.2 开发地图ArcGIS 100.15.6(ArcGIS Runtime SDK for Qt)
开发语言·qt·arcgis
不会玩技术的技术girl41 分钟前
使用Python爬虫获取1688 App原数据API接口
开发语言·爬虫·python
zhenryx1 小时前
前端-导出png,jpg,pptx,svg
开发语言·前端·javascript
子伟-H51 小时前
Vue项目能进行哪些性能优化?
开发语言·javascript·ecmascript
蹦蹦跳跳真可爱5891 小时前
Python----PyQt开发(PyQt基础,环境搭建,Pycharm中PyQttools工具配置,第一个PyQt程序)
开发语言·python·pyqt
uhakadotcom1 小时前
LLVM:编译器开发的瑞士军刀
后端·github