安装Go
- 介绍
- 环境变量
- 跨平台
- 取得源码
- 安装Go
- 编写代码
- 社区资源
介绍
Go 是一个开源项目, 遵守 BSD-style license的协议。本篇文档介绍如何编写Go代码,并且编译,最后运行它们。
目前有两种不同的方法可以使用Go做一些小实验。本篇文档主要介绍如何使用gc编译器和与之相关的工具(如6g,8g等)。如果您想了解 gccgo—
一个具有传统gcc风格的工具—请参考文档Setting up and using gccgo.
环境变量
Go的编译器需要使用三个必须的环境变量和一个可选的环境变量,您可以将其设置在.bashrc文件或其他的登陆脚本中:
- $GOROOT Go运行的根目录。一般来讲它应该是$HOME/go,当然您也可以将其设置为您喜欢的其他值。
- $GOOS和$GOARCH 这两个变量是您所使用的操作系统和编译环境信息。$GOOS的可选值有linux,darwin (Mac OS X 10.5或10.6),还有 nacl(未完成)。$GOARCH可选值有amd64(64位x86处理器,目前最成熟),386(32位x86处理器),还有arm(32位ARM 处理器,未完成)。目前可使用的组合为:linux/amd64, linux/arm, linux/386, darwin/amd64, darwin/386, nacl/386。
- $GOBIN(可选变量) 二进制文件将放置于此。如果您设置了$GOBIN,您必须确定在$PATH变量中也有同样的路径,使得编译器能够找到最新的可执行文件。默认的路径是 $HOME/bin,它应该已经在您的$PATH变量中了。
注意变量$GOARCH和$GOOS指明的是目标环境, 而与您目前使用的环境无关,因此跨平台编译将会十分方便。
在您的.bashrc中设置这几个变量,如:
export GOROOT=$HOME/go
export GOARCH=amd64
export GOOS=linux
用以下命令检查您的设置。
$ env | grep '^GO'
跨平台
Go编译器支持两种操作系统(Linux, Mac OS X),三种目标平台。Linux和Mac平台已经可以通用,但是ARM平台上的目标平台不能 为Mac OS X(目前为止)。
在不同目标平台上,编译器所得到的结果会有一些品质差异,请注意这一点。 amd64(或 x86-64); 6g,6l,6c,6a
目前最成熟的部分。编译器拥有很好的优化器,并能够生成有效的机器码(尽管 gccgo 有时候做的更好) 386(或 x86,x86-32); 8g,8l,8c,8a
不像amd64平台那么成熟,但也拥有与之相近的性能。 arm (或 ARM);5g,5l,5c,5a
目前还有一些显而易见的缺陷,改善中。Tested against QEMU and an android phone. Except for things like low-level operating system interface code, the runtime support is the same in all ports and includes a mark-and-sweep garbage collector (a fancier one is in the works), efficient array and string slicing, support for segmented stacks, and a strong goroutine implementation.
请参阅文档gccgo document获得有关编译器和环境方面的更多细节。
取得源码
如果您没有安装Mercurial(即是说,您不能使用hg命令),执行以下命令: $ sudo easy_install mercurial 可以解决问题。(在Ubuntu乌班图系统上,您可以先试一试apt-get install python-setuptools python- dev命令)。如果没有成功,请访问Mercurial Download页面。
请确认$GOROOT路径不存在或者它是空的,然后运行以下命令以便取得源代码:
$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT
安装Go Go是用C语言编写的,为了编译它,您必须有GCC,标准C库,分析程序生成器, make和文本编辑工具ed。在Mac OS X系统上,它可以作为 Xcode的插件,而在Linux系统上,首先使用以下命令:
$ sudo apt-get install bison gcc libc6-dev ed make
(译注:mac系统上从这一步开始)为了生成可运行的机器码,请确保$GOBIN(如果$GOBIN没有设置,那就是$HOME/bin)在你的 $PATH里面,然后执行:
$ cd $GOROOT/src
$ ./all.bash
如果all.bash执行的顺利,退出前将会有以下信息:
--- cd ../test
N known bugs; 0 unexpected bugs
其中数字N会随着每一次的发布而不同。
编写代码
以源码文件file.go为例,使用以下命令编译:
$ 6g file.go
6g 是面向 amd64平台的编译器。它生成的文件是file.6。后缀 ‘6’ 指明目标平台是amd64。386平台和arm平台对应的后缀分别 为‘8’和‘5’。也就是说,如果您的目标平台为386,您应该使用8g, 与之对应的输出为file.8. 使用以下命令进行链接:
$ 6l file.6
然后就可以运行了:
$ ./6.out
以下是一个完整的示例:
$ cat >hello.go <<EOF
package main
import "fmt"
func main() {
fmt.Printf("hello, world\N")
}
EOF
$ 6g hello.go
$ 6l hello.6
$ ./6.out
hello, world
$
在链接命令中,我们不必指明hello.6引用的包(在这个例子里,就是包 fmt)。链接器通过文件hello.6就可以确定了。 为了编译更复杂的程序,您会需要使用Makefile。在我们的源代码包中有一些示例与说明,路径是$GOROOT/src/cmd/godoc/ Makefile和$GOROOT/src/pkg/*/Makefile. 您还可以参考更多关于GO工程的文档(链接:document) about contributing to the Go project gives more detail about the process of building and testing Go programs.
Community resources
For real-time help, there may be users or developers on #go-nuts on the Freenode IRC server.
The official mailing list for discussion of the Go language is Go Nuts.
Bugs can be reported using the Go issue tracker.
For those who wish to keep up with development, there is another mailing list, golang-checkins, that receives a message summarizing each checkin to the Go repository.