From f9b030f2acf777ac24b7465c4542129eba71e8b4 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Sun, 15 Mar 2015 01:18:16 -0400 Subject: [PATCH] =?UTF-8?q?=E7=B2=BE=E6=A0=A1=EF=BC=9A2.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eBook/02.2.md | 2 +- eBook/02.3.md | 97 +++++++++++++------------------------ eBook/images/2.3.goenv.png | Bin 12605 -> 0 bytes 3 files changed, 36 insertions(+), 63 deletions(-) delete mode 100644 eBook/images/2.3.goenv.png diff --git a/eBook/02.2.md b/eBook/02.2.md index d61a79b..dc8ca0f 100644 --- a/eBook/02.2.md +++ b/eBook/02.2.md @@ -4,7 +4,7 @@ Go 开发环境依赖于一些操作系统环境变量,你最好在安装 Go - **$GOROOT** 表示 Go 在你的电脑上的安装位置,它的值一般都是 `$HOME/go`,当然,你也可以安装在别的地方。 - **$GOARCH** 表示目标机器的处理器架构,它的值可以是 386、amd64 或 arm。 -- **$GOOS** 表示目标机器的操作系统,它的值可以是 darwin、freebsd,linux 或 windows。 +- **$GOOS** 表示目标机器的操作系统,它的值可以是 darwin、freebsd、linux 或 windows。 - **$GOBIN** 表示编译器和链接器的安装位置,默认是 `$GOROOT/bin`,如果你使用的是 Go 1.0.3 及以后的版本,一般情况下你可以将它的值设置为空,Go 将会使用前面提到的默认值。 目标机器是指你打算运行你的 Go 应用程序的机器。 diff --git a/eBook/02.3.md b/eBook/02.3.md index 32f3af0..d80531c 100644 --- a/eBook/02.3.md +++ b/eBook/02.3.md @@ -1,6 +1,6 @@ # 2.3 在 Linux 上安装 Go -如果你能够自己下载并编译 Go 的源代码来说是非常有教育意义的,你可以根据这个页面找到安装指南和下载地址:[http://golang.org/doc/install.html](http://golang.org/doc/install.html)。 +如果你能够自己下载并编译 Go 的源代码来说是非常有教育意义的,你可以根据这个页面找到安装指南和下载地址:[Download the Go distribution](http://golang.org/doc/install)。 我们接下来也会带你一步步的完成安装过程。 @@ -9,52 +9,36 @@ 我们在 Linux 系统下一般通过文件 `$HOME/.bashrc` 配置自定义环境变量,根据不同的发行版也可能是文件 `$HOME/.profile`,然后使用 gedit 或 vi 来编辑文件内容。 export GOROOT=$HOME/go - export GOBIN=$GOROOT/bin - export GOARCH=386 - export GOOS=linux - - ( **译者注:目前的 Go 版本一般情况下已不需要设置 $GOBIN** ) 为了确保相关文件在文件系统的任何地方都能被调用,你还需要添加以下内容: - export PATH=$GOROOT/bin:$PATH + export PATH=$PATH:$GOROOT/bin 在开发 Go 项目时,你还需要一个环境变量来保存你的工作目录。 export GOPATH=$HOME/Applications/Go - `$GOPATH` 可以包含多个工作目录,取决于你的个人情况。如果你设置了多个工作目录,那么当你在之后使用 `go get` (远程包安装命令)时远程包将会被安装在第一个目录下。 + `$GOPATH` 可以包含多个工作目录,取决于你的个人情况。如果你设置了多个工作目录,那么当你在之后使用 `go get`(远程包安装命令)时远程包将会被安装在第一个目录下。 在完成这些设置后,你需要在终端输入指令 `source .bashrc` 以使这些环境变量生效。然后重启终端,输入 `go env` 和 `env` 来检查环境变量是否设置正确。 - ![](images/2.3.goenv.png?raw=true) - - 图2.2 在终端输入 `go env` 后打印的信息 - 2. 安装 C 工具 - Go 的工具链是用 C 语言编写的,因此在安装 Go 之前你需要先安装相关的 C 工具。如果你使用的是 Ubuntu 的话,你可以在终端输入以下指令( ***译者注:由于网络环境的特殊性,你可能需要将每个工具分开安装*** )。 + Go 的工具链是用 C 语言编写的,因此在安装 Go 之前你需要先安装相关的 C 工具。如果你使用的是 Ubuntu 的话,你可以在终端输入以下指令( **译者注:由于网络环境的特殊性,你可能需要将每个工具分开安装** )。 sudo apt-get install bison ed gawk gcc libc6-dev make 你可以在其它发行版上使用 RPM 之类的工具。 - -3. 安装 Mercurial - Go 源代码是通过 Mercurial 来进行版本管理的,因此你必须在你下载 Go 源代码之前安装这款工具。你可以使用指令 `hg` 来检查你的计算机上是否已经安装该工具,如果没有,请使用以下指令来完成安装: +3. 获取 Go 源代码 - sudo apt-get install python-setuptools - sudo apt-get install python-dev - sudo apt-get install build-essential - sudo apt-get install mercurial + 从 [官方页面](https://golang.org/dl/) 下载 Go 的源码包到你的计算机上,然后将解压后的目录 `go` 通过命令移动到 `$GOROOT` 所指向的位置。 -4. 获取 Go 源代码 + wget https://storage.googleapis.com/golang/go.src.tar.gz + tar zxv go.src.tar.gz + sudo mv go $GOROOT - 通过以下指令来从服务器获取 Go 源代码到你的计算机上,这里我们直接使用 `$GOROOT` 的值,在获取源代码之前,你不能手动创建相关目录,否则将导致获取失败。 - - hg clone -r release https://go.googlecode.com/hg/ $GOROOT - -5. 构建 Go +4. 构建 Go 在终端使用以下指令来进行编译工作。 @@ -65,11 +49,7 @@ ![](images/2.3.allbash.png?raw=true) - 图2.3 完成编译后在终端打印的信息 - - **注意事项** - - 如果你在编译过程中发生错误,请尝试使用指令 `hg pull -u` 来更新源代码,然后进行第 5 步。 + 图 2.3 完成编译后在终端打印的信息 **注意事项** @@ -83,55 +63,50 @@ export DISABLE_NET_TESTS=1 - 如果这样还是没有办法阻止错误的发生的话,你可以通过添加 `net` 包到忽略测试列表,这个列表在 `$GOROOT/src/pkg` 下的 Makefile 中。 - 如果你完全不想运行包的测试,你可以直接运行 `./make.bash` 来进行单纯的构建过程。 -6. 测试安装 +5. 测试安装 使用你最喜爱的编辑器来输入以下内容,并保存为文件名 `test.go`。 - Example 2.1 [hello_world1.go](examples/chapter_2/hello_world1.go) + 示例 2.1 [hello_world1.go](examples/chapter_2/hello_world1.go) - package main - func main() { - println("Hello", "world") - } + ```go + package main + + func main() { + println("Hello", "world") + } + ``` 切换相关目录到下,然后执行指令 `go run hello_world1.go`,将会打印信息:`Hello, world`。 -7. 验证安装版本 +6. 验证安装版本 你可以通过在终端输入指令 `go version` 来打印 Go 的版本信息。 如果你想要通过 Go 代码在运行时检测版本,可以通过以下例子实现。 - Example 2.2 [version.go](examples/chapter_2/version.go) + 示例 2.2 [version.go](examples/chapter_2/version.go) - package main + ```go + package main - import ( - "fmt" - "runtime" - ) + import ( + "fmt" + "runtime" + ) - func main() { - fmt.Printf("%s", runtime.Version()) - } + func main() { + fmt.Printf("%s", runtime.Version()) + } + ``` - 这段代码将会输出 go1.0.3 或 go1.1。 + 这段代码将会输出 `go1.4.2` 或类似字符串。 -8. 更新源代码版本 +7. 更新版本 - 在终端输入以下指令来完成源代码的更新: - - cd $GOROOT - hg pull - hg update release - cd src - sudo ./all.bash - - 你可以在这个页面查看到最新的稳定版:[http://golang.org/doc/devel/release.html](http://golang.org/doc/devel/release.html) + 你可以在 [发布历史](http://golang.org/doc/devel/release.html) 页面查看到最新的稳定版。 当前最新的稳定版 Go 1 系列于 2012 年 3 月 28 日发布。 @@ -141,8 +116,6 @@ - Go weekly:包含最近更新的版本,一般每周更新一次 - Go tip:永远保持最新的版本,相当于内测版 - 你可以通过 gofix 这个工具来进行 Go 源代码的版本迁移,将旧版本的代码升级到最新版。 - 当你在使用不同的版本时,注意官方博客发布的信息,因为你所查阅的文档可能和你正在使用的版本不相符。 ## 链接 diff --git a/eBook/images/2.3.goenv.png b/eBook/images/2.3.goenv.png deleted file mode 100644 index 0d4164ce9b3c5439a05e4246761dceb06fc50d84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12605 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 Ch*pIF