Go语言学习笔记 · 第十节
《Go语言学习笔记》第十节
本节介绍Go开发环境的搭建与编译工具的使用。可下载官方开发包,也可自行编译:因Go1.5已用Go语言编写Go编译器(自举),建议先装C版1.4配合gcc完成后续版本编译……
本节介绍Go开发环境的搭建与编译工具的使用。可下载官方开发包,也可自行编译:因Go1.5已用Go语言编写Go编译器(自举),建议先装C版1.4配合gcc完成后续版本编译,完成后创建工作空间并设置环境变量。常用工具包括go build(重新编译依赖包)、go install(增量编译并安装到bin、pkg目录,依据buildid对比源码变化决定是否重编)、go get(下载第三方包到首个工作空间,加-u检查更新)、go env、go clean等。调试时加-gcflags"-N-l"关闭优化,发布时用-ldflags"-w-s"剔除符号表。交叉编译通过GOOS、GOARCH指定目标平台,不支持CGO;条件编译可用文件名后缀、build指令或自定义tag三种方式。go generate命令可扫描并执行源码中的生成指令。随后剖析程序启动过程:编译器插入引导代码,经汇编实现的入口完成初始化,args整理命令行参数,osinit确定CPU核数,schedinit统一调用运行时环境初始化;之后runtime.main执行各包的init函数,runtime.init调用runtime包的init,main.init调用其余包的init,建议init只做局部初始化。最后说明内存分配器的基本策略:向系统申请大块内存切分成小块链表供分配复用,闲置过多时归还系统,分配器不主动回收,由GC触发。