对于刚开始学Go的同窗,可能会对几个概念比较迷糊:GOROOT
和GOPATH
,今天就来聊聊它们。 执行go env
,给你们看下我开发环境的相关参数配置(部分):git
GOARCH="amd64" GOBIN="/Users/chengguilu/goProjects/bin" GOCACHE="/Users/chengguilu/Library/Caches/go-build" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOOS="darwin" GOPATH="/Users/chengguilu/goProjects" GOROOT="/usr/local/go" GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" GCCGO="gccgo" CC="clang" CXX="clang++" 复制代码
这个比较好理解,GOROOT表示的是go语言编译、工具、标准库等的安装路径(好比:/usr/local/go
),简而言之,就是安装路径,GO安装好以后就有了。github
(画重点) 可自定义路径的工做空间-workspace,Go1.7以前必须设置这个变量,且不可以与Go的安装目录相同。1.8以后,GOPATH有默认值--$HOME/go
。能够执行go env GOPATH
查看,从上面能够看到,个人GOPATH是/Users/chengguilu/goProjects
。其实,说白了,GOPATH对应计算机的一个目录。 做用:用来存放Go代码,Go的可运行文件,以及相应的编译以后的包文件。 Go代码必须放在工做空间内,workspace目录包含三个子目录markdown
咱们能够经过go工具构建源码包,并将其生成的二进制文件安装到 pkg 和 bin 目录中。 咱们实际操练下,上一节的Hello World
入门程序就按照这种方式存放。在workspace建立相关目录src、pkg和bin,将写好的hello.go
保存在GOPATH/src/hello
目录。架构
hello.go
go install hello/ 复制代码
咱们能够在系统的任一目录中执行此命令,go 工具会根据指定的GOPATH,在 hello/
包内查找源码(下一节给你们讲包的概念,如今你们了解概念就能够,没必要深究)。若在包路径下执行go install
,能够省略包路径。 go install
命令产生可执行的二进制文件,接着它会将该二进制文件安装到工做空间的 bin 目录中,例子中为 $GOPATH/bin/hello
。 工具
$GOPATH/bin/hello
来运行(
$GOPATH
请自行替换)
$GOPATH/bin
添加到 PATH 中。
编写一个库,并让hello程序来调用它。 在$GOPATH/src
下建立包目录github.com/Seekload/stringutil
oop
reverse.go
并保存(文件看不懂不要紧,随着学习深刻,相关知识点都会讲到,这里只作演示使用):
package stringutil // Reverse 将其实参字符串以符文为单位左右反转。 func Reverse(s string) string { r := []rune(s) for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 { r[i], r[j] = r[j], r[i] } return string(r) } 复制代码
目录如图: 学习
go build
命令来测试该包的编译:
go build github.com/Seekload/stringutil 复制代码
也能够在包目录下直接执行go build
。 这个命令不会产生输出文件。想要输出的话,必须使用 go install
命令,它会将编译以后的静态文件放到工做空间的 pkg 目录中。 测试
stringutil
包构建完毕后,修改原来的 hello.go 文件并使用它:
package main import ( "fmt" "github.com/Seekload/stringutil" ) func main() { fmt.Println(stringutil.Reverse("!oG ,daolkeeS")) } 复制代码
执行go install hello/
,从新编译hello.go
,生成可执行文件hello
并执行: ui
hello.go
中,咱们引入了
github.com/Seekload/stringutil
包,因此从新执行
go intall hello/
时,
stringutil
包会被自动安装。 注意:
go install github.com/Seekload/stringutil
是将
stringutil.a
放到
pkg/darwin_amd64
目录中,反映出其源码目录。
darwin_amd64
这部分能帮助跨平台编译,并反映出你的操做系统和架构。
这一节涉及了包的概念,有些同窗可能还不太清楚。别急,将在下节给你们讲解Go语言中的包。spa
原创文章,若需转载请注明出处!
欢迎扫码关注公众号「Golang来啦」或者移步 seekload.net ,查看更多精彩文章。
公众号「Golang来啦」给你准备了一份神秘学习大礼包,后台回复【电子书】领取!