贵有恒,何必三更起五更眠。最无益,只怕一日曝十日寒。

今天来学习 GOPATH 环境变量配置与工作空间,下一节将会学习到 GO 的一些常用命令。

GOPATH 配置

go 命令依赖一个重要的环境变量:$GOPATH

在类似 Unix 环境大概这样设置: sh export GOPATH=/home/apple/mygo
Windows 设置如下,新建一个环境变量名称叫做 GOPATH: GOPATH=c:\mygo GOPATH允许多个目录,当有多个目录时,请注意分隔符,Windows是分号,Linux系统是冒号。当有多个 GOPATH 时,默认会将 go get 的内容放在第一个目录下

$GOPATH 目录约定有三个子目录:

  • src 存放源代码(比如:.go .c .h .s等)
  • pkg 编译后生成的文件(比如:.a)
  • bin 编译后生成的可执行文件(为了方便,可以把此目录加入到 $PATH 变量中)

GOPATH 是一些列用于go来查找包的目录列表. 使用 import “包名” 的时候, 如果在 GOROOT 里找不到, 应该会转向到你的 GOPATH 里去寻找.

注:GOPATH 和 GOROOT 不要设置在同一目录下,是因为不想你新安装的包, 污染了核心 go 的 pkg 和 src 文件。

应用目录

一般的,新建应用或者代码包时,都是在 src 目录下新建一个文件夹,文件夹的名称就是包名称,也可以有多级目录,例如:在 src 目录下新建了 $GOPATH/src/github.com/shure/mymath,那么这个包的路径就是github.com/shure/mymath,包名称是最后一级目录 mymath

然后在 github.com/shure/mymath 下新建文件 sqrt.go 内容如下

1
2
3
4
5
6
7
8
9
package mymath

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

这样我们就创建了一个 mymath 的包,建议 package 的名称和目录名保持一致。

编译应用

编译应用 GO 提供了两种方式

1、进入对应的应用包目录,执行 go install 就可以安装了。

2、在任意目录执行 go install mymath

安装之后进入 pkg 目录下就可以看到 mymath.a 的文件,这个 .a 文件就是应用包。接下来我们来调用它:

新建应用 mathapp/main.go ,内容如下:

1
2
3
4
5
6
7
8
9
10
package main

import (
"fmt"
"github.com/shure/mymath"
)

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

然后进入该目录执行 go build 命令,就会在该目录下面生成一个 mathapp 可执行的文件,Linux 下运行 sh ./mathapp, Windows 下运行 ./mathapp.exe 就会输出 Sqrt(2) = 1.414213562373095

继续执行 go install 命令安装,这时就会在 $GOPATH/bin/ 目录下生成一个 mathapp 的可执行文件,同样可以运行它,以 Windows 为例:./mathapp.exe 并打印 Sqrt(2) = 1.414213562373095

获取远程包

GO 提供了一个获取远程包的工具 go get ,目前go get支持多数开源社区(例如:
github、googlecode、bitbucket、Launchpad)

注意:使用这个命令必须安装对应开源平台的源码控制工具,例如:github 使用 git ,googlecode 使用 hg。

我们可以使用这个工具来获取 GO 官方提供的教程,安装至本地方便查阅,这对于国内用户来说是非常必要的。中文版教程 github 地址 https://github.com/Go-zh/tour

直接在你 $GOPATH 的目录下运行 $ go get -u github.com/Go-zh/tour/gotour 等安装完成之后,会在 $GOPATH/bin 目录下生成一个 gotour 的可执行文件,运行该文件就会在你默认浏览器中打开教程。若你想安装该教程的英文版,直接执行 go tool tour 命令即可安装。

go get 本质上可以理解为首先第一步是通过源码工具 clone 代码到 src 下面,然后执行 go install 在代码中如何使用远程包,很简单的就是和使用本地包一样,只要在开头 import 相应的路径就可以 import "github.com/shure/mymath".

应用目录结构

上面例子的目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$GOPATH
bin
|--mathapp.exe
pkg
|--windows_amd64 // 相应平台
|--github.com
|--shure
|--mymath.a
src
|--github.com
|--Go-zh
|--shure
|--mathapp
|--main.go
|--mymath
|--sqrt.go
|--hello
|--hello.go

参考与相关链接

参阅书籍:《Go Web 编程》

go 官方教程:https://tour.golang.org

go 中文版教程本地安装:https://github.com/Go-zh/tour

go 中文版教程:http://tour.go-zh.org

本教程 github 地址:https://github.com/dddreams/go-tutorial

ddAnswer

更多文章请关注微信公众号: zhiheng博客

如果觉得文章对你有用,转发、分享、赞赏才是真爱 [斜眼笑]