在阅读 Go 源代码的过程,可以看到大量形如 //go:xxx 的注释,虽然很容易猜测到肯定是和编译相关的,但并不清晰,于是就想深入了解一下。 在日常编译可执行文件的过程中,我想大家使用最多的毫无疑问是 go build 。只需一行命令即可将庞大且复杂的项目源代码编译成可执行文件,Go 把复杂的编译过程设计的非常简单、友好。 但是其实 Go 和 C/C++ 一样,也分为 compile 和 link 两个过程,今天我们要讲的就是 compile 过程。 自举 Go 在 1.5 之前使用 C 实现编译器,在 1.5 实现了自举,也就是说 Go 的编译器是使用 Go 语言本身去实现的。 自举对编程语言来说是个里程碑,实现自举包括但不限于 …
阅读更多最近在开发过程中遇到一个比较在编码上无解的问题,最终通过条件编译得到一个比较满意的方案。对于Go的条件编译,可能很多人都了解,甚至不知道。Go通过在行注释的前面编写如下代码来实现条件编译。 1// +build 条件编译的指令可能出现在任何源代码中,不止是*.go文件,可能是go汇编文件。无论是何种源文件,条件编译指令一定都出现在文件的顶部,并且在空行或者其他行注释之前。所以条件编译指令也必须在package语句之前。 编译规则 可以将 // +build 后面的内容当成一个表达式。当表达式返回true时,当前文件参与编译,反之不参与编译。 多个片段之间的空格表示它们之间是OR的关系。如下,表示GOOS值是linux或 …
阅读更多在写boxgo的过程中,想要生成漂亮的godoc,发现不太熟悉godoc的用法,所以就有了本篇文章,记录一下。 Go团队非常重视文档,文档对项目的可阅读性、可维护性起到重要作用,所以写好文档变得非常重要。Go团队提供了godoc工具以帮助开发者方便、准确,容易的生成项目文档。godoc解析Go源代码(包括注释),并以HTML或纯文本格式生成文档。 生成文档 提取规则: 类型、变量、常量、函数,包都可以通过在声明的前面写注释的方法生成文档(中间不要有空行)。 1// Package doc 包注释 --- good 2package doc 3 4type ( 5 // UserType 类型注释 --- good 6 …
阅读更多