2.1 平台与架构
GO目前有两个版本的编译器:原生gc编译器和非原生gccgo编译器。这两款编译器都在类Unix系统下工作,gc版本的编译器已经被移植到windows平台。
1.4以及之前的版本,Go的编译器是C写的,1.5开始自举,自举的意思就是用Go来编写一个Go的编译器,所以1.4以后的Go编译器是基于Go1.4开发的。
Go语言可以运行在Intel和arm处理器上,所以它也可以在安卓系统下运行。
Go源代码用.go作为后缀,用包package来组织源代码文件,一个包就是一个目录,注意目录永远不应该包含空格。可执行的包文件在被压缩后的后缀是.a。
2.2 Go环境变量
安装好Go之后,一些比较重要的环境变量,这些环境变量可以使用go env命令查看:
- $GOROOT :表示 Go 在你的电脑上的安装位置。
- $GOARCH :表示目标机器的处理器架构,它的值可以是 386、amd64 或 arm。
- $GOOS :表示目标机器的操作系统,它的值可以是 darwin、freebsd、linux 或 windows。
- $GOBIN :表示编译器和链接器的安装位置,默认是 $GOROOT/bin,在 Go 1.0.3 及以后的版本,一般情况下它的值设置为空,Go 将会使用前面提到的默认值。
- $GOPATH: 路径下分别包含三个规定的目录:src、pkg 和 bin,这三个目录分别用于存放源码文件、包文件和可执行文件。
- $GOARM :专门针对基于 arm 架构的处理器,它的值可以是 5 或 6,默认为 6。
- $GOMAXPROCS: 用于设置应用程序可使用的处理器个数与核数。
2.3 Go运行时runtime
runtime相当于Java和.NET等的虚拟机,虽然Go编译器产生的是本地可执行代码,但是运行的时候还是在runtime上的。runtime负责管理内存管理、垃圾回收、栈处理、goruntime、slice、map、reflection等。
Go的通过简单的标记-清除来实现垃圾回收器,使用一门具有垃圾回收的语言并不代表可以避免内存分配所带来的问题,分配和回收都是消耗cpu资源的行为。
Go的可执行文件都会比源文件大很多,但是部署简单,也不会有其他语言麻烦的依赖问题。