沧州景点:你知道Golang源码各目录的作用吗?

admin 5个月前 (04-17) 科技 32 0

我是平也,这有一个专注Gopher手艺与发展的开源项目「go home」

导读

学习Go语言源码的第一步就是领会先领会它的目录结构,你对它的源码目录领会若干呢?

目录总览

.
├── 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语言与手艺原理。

,

全讯网APP

全讯网APP是全讯网APP、皇冠最新网址的线路登入备用网址。新2皇冠备用网址提供多条新2皇冠最新、最快的登录线路,包括新2代理线路、新2会员线路,并提供新2皇冠最新网址APP下载。

皇冠APP声明:该文看法仅代表作者自己,与本平台无关。转载请注明:沧州景点:你知道Golang源码各目录的作用吗?

网友评论

  • (*)

最新评论

标签列表

    文章归档

    站点信息

    • 文章总数:552
    • 页面总数:0
    • 分类总数:8
    • 标签总数:974
    • 评论总数:162
    • 浏览总数:3552