go 语言最近很火,与时俱进,我也看了看go 的语法。
看起来 go 还是不错的,有很多新的feature。 就下载了代码研究了一下。
go 的 src 目录下面存在三套编译文件:
- window 平台, 所有 bat 文件
- plan9 平台,所有 rc 文件
- unix 类平台,所有bash 文件
以 unix 编译文件为例, go 的编译入口时在 src/all.bash , 这是一个bash 脚步, 这个脚步只是简单的调用了 make.bash 在脚步结束之后,调用 dist banner 输出编译的信息。
set -e
if [ ! -f make.bash ]; then
echo 'all.bash must be run from $GOROOT/src' 1>&2
exit 1
fi
OLDPATH="$PATH"
. ./make.bash "$@" --no-banner
bash run.bash --no-rebuild
PATH="$OLDPATH"
$GOTOOLDIR/dist banner # print build info
dist 是在 make.bash 中生成的一个可执行文件,go 的所有编译都是在这个文件的控制下完成的。 个人认为这并不是一个好的设计,导致维护编译系统的成功过高,如果要修改一下编译选项,往往要修改 dist 源代码。dist 的代码在目录: /src/cmd/dist 下。
dist 这个命令行程序支持如下几个参数:
"banner print installation banner\n" ; 打印安装的一些信息
"bootstrap rebuild everything\n" ; 重新编译所有的 go 代码
"clean deletes all built files\n" ; 清楚编译的 go 代码
"env [-p] print environment (-p: include $PATH)\n" ÿ