GOPATH
go命令依赖于一个重要的工作环境,$GOPATH
(上篇文章已设置)
注:这个不是Go安装目录,下面以我自己的工作目录为例子,请替换为自己的工作目录
$GOPATH
允许多个目录,多个目录时使用分隔符分隔,windows系统使用分号,linux使用冒号
$GOPATH目录约定有三个子目录
- src:存放源代码
- pkg:编译后生成的文件
- bin:编译后生成的可执行的文件
应用目录
在$GOPATH/src
目录下,新建立目录mypackage,在目录mypackage下新建hello.go文件
文件内容如下:
package mypackage
import (
"fmt"
)
func HelloWorld() {
fmt.Println("Hello world!")
}
这样我们的第一个应用包就完成了,注意:一般建议package的名称和目录名称保持一致。
编译应用
在上面已经新建立了第一个应用包mypackage,那么该如何编译呢?
有两种选择
- 在对应的目录下执行
go install
,就可以安装了 - 在任意目录下执行
go install mypackage
在目录$GOPATH下就可以看到生成了mypackage.a文件
接下来我们新建一个应用gotest,新建目录$GOPATH/src/gotest
,
然后再目录下新建文件main.go,文件内容如下:
package main
import (
"mypackage"
)
func main() {
mypackage.HelloWorld()
}
进入应用目录,执行go build
命令,那么该应用目录下会有个gotest的可执行文件(windows下是gotest.exe)
go build
会自动编译依赖的应用包。
输入命令
gotest
输出
Hello world!
安装应用
在应用目录gotest下执行名
go install
那么在$GOPATH/bin/
下增加了一个可执行文件gotest,这样可以在命令行输入如下命令就可以执行(我们已经设置了环境变量$GOPATH/bin
)
gotest
输出
Hello world!
获取第三方包
在使用第三方包是,必须先获取该包,如:在命令行中输入
go get github.com/bitly/go-simplejson
该命令会自动获取该包依赖的其它第三方包,另外加上
-u
参数可以自动更新包。通过这个命令可以获取相应的源码,对应的开源平台采用不同的源码控制工具,例如github采用git、googlecode采用hg,所以要想获取这些源码,必须先安装相应的源码控制工具。另外但GOPATH是多个目录时,默认放在第一个目录下
那么在我们本地 $GOPATH/src
目录下就有了如下的文件:
$GOPATH
bin
|--gotest
|-- gotest.exe
pkg
|--对应平台(如:windows_amd64、linux_amd64)
|-- mypackage
|--mypackage.a
src
|-- github.com
|-- bitly
|-- go-simplejson
|-- mypackage
|-- hello.go
|-- gotest
|-- main.go
|-- gotest.exe
第三方包的使用
编辑$GOPATH/src/gotest/main.go
文件,内容如下:
package main
import (
"fmt"
"github.com/bitly/go-simplejson"
"mypackage"
)
func main() {
mypackage.HelloWorld()
jsonString := "{\"username\":\"blue bird\",\"age\":28}"
json, err := simplejson.NewJson([]byte(jsonString))
if err != nil {
fmt.Println("error", err)
return
}
username, _ := json.Get("username").String()
age, _ := json.Get("age").Int()
fmt.Printf("username=%s,age=%d\n", username, age)
}
在对应应用目录下输入命令
$GOPATH/src/gotest> go build
$GOPATH/src/gotest> gotest.exe
运行结果如下:
Hello world!
username=blue bird,age=28