Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 45 additions & 42 deletions 1.1.md
Original file line number Diff line number Diff line change
@@ -1,91 +1,94 @@
# 1.1 Go 安装

##如何判断机器是32还是64位系统
我们接下来的Go安装需要判断操作系统的位数,所以这小节我们先确定我们自己的系统类型。
##如何判断自己的操作系统是32位还是64位?

针对window系统,右击我的电脑,点击属性,显示的信息里面我们可以判断出来,XP系统如果是64位的,那么会显示X64,如果没有X64,那么默认都是32位。window7系统也是查看我的电脑的属性,在系统类型里面会显示使用的系统类型,64位操作系统或者32位操作系统
我们接下来的Go安装需要判断操作系统的位数,所以这小节我们先确定自己的系统类型

Mac系统的用户建议直接使用64位的,因为Go支持的Mac OS X已经不支持在纯32位处理器上跑了
Windows系统用户请按Win+R运行cmd,输入`systeminfo`后回车,稍等片刻,会出现一堆系统信息。在“系统类型”一行中,若显示“x64-based PC”,即为32位系统;若显示“X86-based PC”,则为32位系统

Linux系统通过命令`uname -a`可以查看系统的信息:
Mac系统用户建议直接使用64位的,因为Go所支持的Mac OS X版本已经不支持纯32位处理器了。

64位机器显示
Linux系统用户可通过在Terminal中执行命令`uname -a`来查看系统信息:

前面有一段描述 x86_64 x86_64 x86_64 GNU/Linux
64位系统显示

32位机器显示
<一段描述> x86\_64 x86\_64 x86\_64 GNU/Linux

前面有一段描述 i686 i686 i386 GNU/Linux
32位系统显示

<一段描述> i686 i686 i386 GNU/Linux

## Windows 安装

访问[下载地址][downlink],32位系统下载go1.0.2.windows-386.msi,64位系统下载go1.0.2.windows-amd64.msi。双击打开下载的文件,一路按照默认点击下一步,这个时候go已经安装到你的系统中,默认安装之后已经在你的系统环境变量中加入了`c:/go/bin`,这个时候打开cmd,输入`go`

## Window 安装

访问[下载地址][downlink],32位机器下载go1.0.2.windows-386.msi,64位机器下载go1.0.2.windows-amd64.msi,双击下载文件,一路按照默认点击下一步,这个时候go已经安装到你的系统中,默认安装之后已经在你的系统环境变量中加入了`c:/go/bin`,这个时候打开CMD,输入`go`

看到如下图片说明已经安装成功

![](images/1.1.cmd.png?raw=true)
出现go编译的信息,那么说明go已经安装成功了如果出现该命令不存在,那么可以检查一下自己的环境变量里面的PATH是不是包含了go安装目录

如果出现go的Usage信息,那么说明go已经安装成功了如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录。

## Mac 安装

访问[下载地址][downlink],32位机器下载go1.0.2.darwin-386.pkg,64位机器下载go1.0.2.darwin-amd64.pkg,双击下载文件,一路默认安装点击下一步,这个时候go已经安装到你的系统中,默认已经在PATH中增加了相应的`~/go/bin`,这个时候打开终端,输入`go`
访问[下载地址][downlink],32位系统下载go1.0.2.darwin-386.pkg,64位系统下载go1.0.2.darwin-amd64.pkg,双击下载文件,一路默认安装点击下一步,这个时候go已经安装到你的系统中,默认已经在PATH中增加了相应的`~/go/bin`,这个时候打开终端,输入`go`

看到如下图片说明已经安装成功

![](images/1.1.mac.png?raw=true)

出现go编译的信息,那么说明go已经安装成功了,如果出现该命令不存在,那么可以检查一下自己的环境变量里面的PATH是不是包含了go安装目录
如果出现go的Usage信息,那么说明go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录。

## Linux 安装
访问[下载地址][downlink],32位系统下载go1.0.2.linux-386.tar.gz,64位系统下载go1.0.2.linux-amd64.tar.gz,

## linux安装
访问[下载地址][downlink],32位机器下载go1.0.2.linux-386.tar.gz,64位机器下载go1.0.2.linux-amd64.tar.gz,

解压缩`tar zxvf go1.0.2.linux-amd64.tar.gz`
解压文件到go,移动go文件到home目录下`mv go ~/`

移动go文件夹到home目录下`mv go ~/`

设置PATH,`export PATH=$PATH:$HOME/go/bin`

然后执行`go`

看到如下图片说明已经安装成功

![](images/1.1.linux.png?raw=true)

出现go编译的信息,那么说明go已经安装成功了如果出现该命令不存在,那么可以检查一下自己的环境变量里面的PATH是不是包含了go安装目录
如果出现go的Usage信息,那么说明go已经安装成功了如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录。


## 源码安装
Go的源代码有部分是用C写的,所以你要源码安装,必须第一步安装C的编译工具

Mac系统只要你安装了Xcode,就已经包含了相应的编译工具。在Unix系统中需要安装gcc等工具,例如Ubuntu系统通过这种方式安装编译工具:`sudo apt-get install gcc libc6-dev`。在Window系统中你需要安装MinGW,通过MinGW安装gcc。

首先你必须安装了hg工具,然后执行如下的代码

假设当前在当前用户的home目录下

hg clone -u release https://code.google.com/p/go
cd go/src
./all.bash
在Go的源代码中,有些部分是用C和汇编写的,因此你要想从源码安装,就必须安装C的编译工具。

在Mac系统中,只要你安装了Xcode,就已经包含了相应的编译工具。
在类Unix系统中,需要安装gcc等工具,例如Ubuntu系统可通过这种方式安装编译工具:`sudo apt-get install gcc libc6-dev`。
在Windows系统中,你需要安装MinGW,然后通过MinGW安装gcc。

首先你必须安装了hg工具,然后执行如下代码:

假设目前在当前用户的`home`目录下

hg clone -u release https://code.google.com/p/go
cd go/src
./all.bash

运行all.bash后出现"ALL TESTS PASSED"的字样的时候才算安装成功;

上面写的是Unix风格的,Windows下安装方式类似,只不过是运行all.bat,调用的编译器是MinGW的 gcc。

然后设置PATH,`export PATH=$PATH:$HOME/go/bin`

看到如下图片说明已经安装成功

![](images/1.1.mac.png?raw=true)

出现go编译的信息,那么说明go已经安装成功了如果出现该命令不存在,那么可以检查一下自己的环境变量里面的PATH是不是包含了go安装目录
如果出现go的Usage信息,那么说明go已经安装成功了如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录。

## links
* [目录](<preface.md>)
* 上一节: [Go环境配置](<1.md>)
* 下一节: [GOPATH 与工作空间](<1.2.md>)

## LastModified
## LastModified
* $Id$

[downlink]: http://code.google.com/p/go/downloads/list "GO安装下载"
[downlink]: http://code.google.com/p/go/downloads/list "Go安装包下载"
160 changes: 81 additions & 79 deletions 1.2.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
# 1.2 GOPATH与工作空间

## GOPATH设置
go 命令依赖一个重要的环境变量:$GOPATH
go 命令依赖一个重要的环境变量:$GOPATH<sup>1</sup>

在类似 Unix 环境大概这样设置:

export GOPATH=/home/apple/mygo
export GOPATH=/home/apple/mygo

Windows 设置如下,新建一个环境变量名称叫做GOPATH:

GOPATH=c:\mygo

GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个gopath的时候windows是分号,linux系统是冒号,当有多个gopath时,默认会将go get的内容放在第一个目录下
GOPATH=c:\mygo

GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个GOPATH的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go get的内容放在第一个目录下


以上 $GOPATH 目录约定有三个子目录:
Expand All @@ -29,22 +29,22 @@ GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个go

执行如下代码

cd $GOPATH/src
mkdir mymath
cd $GOPATH/src
mkdir mymath

新建文件sqrt.go,内容如下

// $GOPATH/src/mymath/sqrt.go源码如下:
package mymath

func Sqrt(x float64) float64 {
z := 0.0
for i := 0; i < 1000; i++ {
z -= (z*z - x) / (2 * x)
}
return z
}
// $GOPATH/src/mymath/sqrt.go源码如下:
package mymath

func Sqrt(x float64) float64 {
z := 0.0
for i := 0; i < 1000; i++ {
z -= (z*z - x) / (2 * x)
}
return z
}

这样我的应用包目录和代码已经新建完毕,注意:package的名称必须和目录名保持一致

## 编译应用
Expand All @@ -56,101 +56,103 @@ GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个go

安装完之后,我们可以进入如下目录

cd $GOPATH/pkg/$GOOS_$GOARCH/mymath.a
cd $GOPATH/pkg/$GOOS_$GOARCH/mymath.a

这个.a文件是应用包,相当于一个函数库一样,那么我们如何进行调用呢?

接下来我们新建一个应用程序来调用

新建应用包mathapp

cd $GOPATH/src
mkdir mathapp
vim main.go
cd $GOPATH/src
mkdir mathapp
vim main.go

// `$GOPATH/src/mathapp/main.go`源码:

package main
package main

import (
"mymath"
"fmt"
)
import (
"mymath"
"fmt"
)

func main() {
fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2))
}
func main() {
fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2))
}

如何编译程序呢?进入该应用目录,然后执行`go build`,那么在该目录下面会生成一个mathapp的可执行文件

./mathapp
./mathapp

输出如下内容

Hello, world. Sqrt(2) = 1.414213562373095
Hello, world. Sqrt(2) = 1.414213562373095

如何安装该应用,进入该目录执行`go install`,那么在$GOPATH/bin/下增加了一个可执行文件mathapp,这样可以在命令行输入如下命令就可以执行

mathapp
mathapp

也是输出如下内容

Hello, world. Sqrt(2) = 1.414213562373095
Hello, world. Sqrt(2) = 1.414213562373095

## 获取远程包
go语言有一个获取远程包的工具就是`go get`,目前go get支持多数开源社区(例如:github、googlecode、bitbucket、Launchpad)

go get github.com/astaxie/beedb

通过这个命令可以获取相应的源码,对应的开源平台采用不同的源码控制工具,例如github采用git、googlecode采用hg,所以要想获取这些源码,必须先安装相应的源码控制工具

通过上面获取的代码在我们本地的源码相应的代码结构如下

$GOPATH
src
|--github.com
|-astaxie
|-beedb
pkg
|--相应平台
|-github.com
|--astaxie
|beedb.a
go get本质上可以理解为首先第一步是通过源码工具clone代码到src下面,然后执行`go install`
$GOPATH
src
|--github.com
|-astaxie
|-beedb
pkg
|--相应平台
|-github.com
|--astaxie
|beedb.a

go get本质上可以理解为首先第一步是通过源码工具clone代码到src下面,然后执行`go install`

在代码中如何使用远程包,很简单的就是和使用本地包一样,只要在开头import相应的路径就可以

import "github.com/astaxie/beedb"
import "github.com/astaxie/beedb"

## 程序的整体结构
通过上面建立的我本地的mygo的目录结构如下所示

bin/
mathapp
pkg/
平台名/ 如:darwin_amd64、linux_amd64
mymath.a
github.com/
astaxie/
beedb.a
src/
mathapp
main.go
mymath/
sqrt.go
github.com/
astaxie/
beedb/
beedb.go
util.go
bin/
mathapp
pkg/
平台名/ 如:darwin_amd64、linux_amd64
mymath.a
github.com/
astaxie/
beedb.a
src/
mathapp
main.go
mymath/
sqrt.go
github.com/
astaxie/
beedb/
beedb.go
util.go

从上面的结构我们可以很清晰的看到,bin目录下面存的是编译之后可执行的文件,pkg下面存放的是函数包,src下面保存的是应用源代码

## links
* [目录](<preface.md>)
* 上一节: [GO安装](<1.1.md>)
* 下一节: [GO 命令](<1.3.md>)

## LastModified
* $Id$
- - -
[1] Windows系统中环境变量的形式为`%GOPATH%`,本书只使用Unix形式,Windows用户请自行替换。
## links
* [目录](<preface.md>)
* 上一节: [GO安装](<1.1.md>)
* 下一节: [GO 命令](<1.3.md>)

## LastModified
* $Id$
Loading