update the GOPATH

This commit is contained in:
astaxie
2015-03-07 00:51:48 +08:00
parent 23ce39667d
commit a7b1266ce0

View File

@@ -1,13 +1,17 @@
# 1.2 GOPATH与工作空间
## GOPATH设置
go 命令依赖一个重要的环境变量:$GOPATH<sup>1</sup>
前面我们在安装Go的时候看到需要设置GOPATH变量Go从1.1版本开始必须设置这个变量而且不能和Go的安装目录一样这个目录用来存放Go源码Go的可运行文件以及相应的编译之后的包文件。所以这个目录下面有三个子目录src、bin、pkg
*这个不是Go安装目录。下面以笔者的工作目录为说明请替换自己机器上的工作目录。*
## GOPATH设置
go 命令依赖一个重要的环境变量:$GOPATH
Windows系统中环境变量的形式为`%GOPATH%`本书主要使用Unix形式Windows用户请自行替换。
*这个不是Go安装目录。下面以笔者的工作目录为示例如果你想不一样请把GOPATH替换成你的工作目录。*
在类似 Unix 环境大概这样设置:
```sh
export GOPATH=/home/apple/mygo
export GOPATH=/home/apple/mygo
```
为了方便,应该把新建以上文件夹,并且把以上一行加入到 `.bashrc` 或者 `.zshrc` 或者自己的 `sh` 的配置文件中。
@@ -15,7 +19,7 @@
```sh
GOPATH=c:\mygo
```
GOPATH允许多个目录当有多个目录时请注意分隔符多个目录的时候Windows是分号Linux系统是冒号当有多个GOPATH时默认会将go get的内容放在第一个目录下
GOPATH允许多个目录当有多个目录时请注意分隔符多个目录的时候Windows是分号Linux系统是冒号当有多个GOPATH时默认会将go get的内容放在第一个目录下
以上 $GOPATH 目录约定有三个子目录:
@@ -26,28 +30,31 @@ GOPATH允许多个目录当有多个目录时请注意分隔符多个
以后我所有的例子都是以mygo作为我的gopath目录
## 应用目录结构
建立包和目录:$GOPATH/src/mymath/sqrt.go包名"mymath"
以后自己新建应用或者一个代码包都是在src目录下新建一个文件夹文件夹名称一般是代码包名称当然也允许多级目录例如在src下面新建了目录$GOPATH/src/github.com/astaxie/beedb 那么这个包路径就是“github.com/astaxie/beedb”包名称是最后一个目录beedb
## 代码目录结构规划
GOPATH下的src目录就是接下来开发程序的主要目录所有的源码都是放在这个目录下面那么一般我们的做法就是一个目录一个项目例如: $GOPATH/src/mymath 表示mymath这个应用包或者可执行应用这个根据package是main还是其他来决定main的话就是可执行应用其他的话就是应用包这个会在后续详细介绍package。
执行如下代码
所以当新建应用或者一个代码包时都是在src目录下新建一个文件夹文件夹名称一般是代码包名称当然也允许多级目录例如在src下面新建了目录$GOPATH/src/github.com/astaxie/beedb 那么这个包路径就是"github.com/astaxie/beedb"包名称是最后一个目录beedb
下面我就以mymath为例来讲述如何编写应用包执行如下代码
```sh
cd $GOPATH/src
mkdir mymath
cd $GOPATH/src
mkdir mymath
```
新建文件sqrt.go内容如下
```go
// $GOPATH/src/mymath/sqrt.go源码如下
package mymath
// $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
func Sqrt(x float64) float64 {
z := 0.0
for i := 0; i < 1000; i++ {
z -= (z*z - x) / (2 * x)
}
return z
}
```
这样我的应用包目录和代码已经新建完毕注意一般建议package的名称和目录名保持一致
@@ -60,49 +67,59 @@ GOPATH允许多个目录当有多个目录时请注意分隔符多个
安装完之后,我们可以进入如下目录
```sh
cd $GOPATH/pkg/${GOOS}_${GOARCH}
//可以看到如下文件
mymath.a
cd $GOPATH/pkg/${GOOS}_${GOARCH}
//可以看到如下文件
mymath.a
```
这个.a文件是应用包那么我们如何进行调用呢
接下来我们新建一个应用程序来调用
接下来我们新建一个应用程序来调用这个应用包
新建应用包mathapp
```sh
cd $GOPATH/src
mkdir mathapp
cd mathapp
vim main.go
cd $GOPATH/src
mkdir mathapp
cd mathapp
vim main.go
```
// `$GOPATH/src/mathapp/main.go`源码:
`$GOPATH/src/mathapp/main.go`源码:
```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))
}
```
可以看到这个的package是`main`import里面调用的包是`mymath`,这个就是相对于`$GOPATH/src`的路径如果是多级目录就在import里面引入多级目录如果你有多个GOPATH也是一样Go会自动在多个`$GOPATH/src`中寻找。
如何编译程序呢?进入该应用目录,然后执行`go build`那么在该目录下面会生成一个mathapp的可执行文件
```sh
./mathapp
./mathapp
```
输出如下内容
```sh
Hello, world. Sqrt(2) = 1.414213562373095
Hello, world. Sqrt(2) = 1.414213562373095
```
如何安装该应用,进入该目录执行`go install`,那么在$GOPATH/bin/下增加了一个可执行文件mathapp,这样可以在命令行输入如下命令就可以执行
mathapp
如何安装该应用,进入该目录执行`go install`,那么在$GOPATH/bin/下增加了一个可执行文件mathapp, 还记得前面我们把`$GOPATH/bin`加到我们的PATH里面了这样可以在命令行输入如下命令就可以执行
```sh
mathapp
```
也是输出如下内容
Hello, world. Sqrt(2) = 1.414213562373095
这里我们展示如何编译和安装一个可运行的应用,以及如何设计我们的目录结构。
## 获取远程包
go语言有一个获取远程包的工具就是`go get`目前go get支持多数开源社区(例如github、googlecode、bitbucket、Launchpad)
@@ -154,10 +171,9 @@ go get本质上可以理解为首先第一步是通过源码工具clone代码到
beedb.go
util.go
从上面的结构我们可以很清晰的看到bin目录下面存的是编译之后可执行的文件pkg下面存放的是函数src下面保存的是应用源代码
从上面的结构我们可以很清晰的看到bin目录下面存的是编译之后可执行的文件pkg下面存放的是应用src下面保存的是应用源代码
- - -
[1] Windows系统中环境变量的形式为`%GOPATH%`本书主要使用Unix形式Windows用户请自行替换。
## links
* [目录](<preface.md>)
* 上一节: [GO安装](<01.1.md>)