go语言中cgo Go语言中for循环对结构体数组进行赋值( 三 )


% cd $GOROOT/src
% ./all.bash
第一步有些突兀,因为 all.bash 仅仅调用了其它两个 shell 脚本;make.bash 和 run.bash 。如果你在使用 Windows 或 Plan 9 , 过程是一样的,只是脚本扩展名变成了.bat 或.rc 。对于本文中的其它脚本,请根据你的系统适当改动 。
第二步:make.bash
. ./make.bash --no-banner
main.bash 来源于 all.bash,因此调用退出将正确终止便宜进程 。main.bash 有三个主要工作,第一个是验证编译 Go 的环境是否完整 。完整性检查在过去几年中建立,它通常尝试避免使用已知的破损工具或必然失败的环境进行编译 。
第三步. cmd/dist
gcc -O2 -Wall -Werror -ggdb -o cmd/dist/dist -Icmd/dist cmd/dist/*.c
一旦可用性检查完毕,make.bash 将编译产生 cmd/dist,cmd/dist取代了之前存在于Go 1 之前的Makefile 编译系统 。cmd/dist用来管理少量的pkg/runtime的代码生成 。cmd/dist 是C语言编写的程序,能够充分利用系统C编译器和头文件来处理大部分主机系统平台的检测 。cmd/dist通常用来检测主机的操作系统和体系结构,即环境变量$GOHOSTOS和$GOHOSTARCH .如果是交叉编译的话,变量 $GOOS和$GOARCH可能会由于你的设置而不同 。事实上,Go 通常用作跨平台编译器,只不过多数情况下,主机和目标系统一致而已 。接下来,make.bash 调用cmd/dist 的引导参数的支持库、 lib9、 libbio 和 libmach , 使用编译器套件,然后用自己的编译器进行编译 。这些工具也是用 C 语言写的中,但是由系统 C 编译器编译产生 。
echo "# Building compilers and Go bootstrap tool for host, $GOHOSTOS/$GOHOSTARCH."
buildall="-a"
if [ "$1" = "--no-clean" ]; then
buildall=""
fi
./cmd/dist/dist bootstrap $buildall -v # builds go_bootstrap
使用的编译器套件 cmd/dist编译产生一个版本的gotool,go_bootstrap 。但go_bootstrap并不是完整得gotool,比方说 pkg/net 就是孤立的,避免了依赖于 cgo 。要编译的文件的列表以及它们的依赖项,是由cmd/dist编译的  , 所以十分谨慎地避免引入新的生成依赖项 到 cmd/go 。
第四步:go_bootstrap
现在,go_bootstrap 编译完成了,make.bash 的最后一部就是使用 go_bootstrap 完成 Go 标准库的编译,包括整套 gotool 的替换版 。
echo "# Building packages and commands for $GOOS/$GOARCH."
"$GOTOOLDIR"/go_bootstrap install -gcflags "$GO_GCFLAGS" \
-ldflags "$GO_LDFLAGS" -v std
第五步:run.bash
现在,make.bash 完成了 , 运行回到了 all.bash,它将引用 run.bash 。run.bash 的工作是编译和测试标准库 , 运行时以及语言测试套件 。
【go语言中cgo Go语言中for循环对结构体数组进行赋值】关于go语言中cgo和Go语言中for循环对结构体数组进行赋值的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

推荐阅读