聊聊 Go 工作空间
前言
对于刚开始学 Go 的同学,可能会对几个概念比较迷糊:GOROOT 和 GOPATH,今天就来聊聊它们。
执行go env
,给大家看下我开发环境的相关参数配置(部分):
|
|
GOROOT
这个比较好理解,GOROOT 表示的是 Go 语言编译、工具、标准库等的安装路径(比如:/usr/local/go
),简而言之,就是安装路径,GO 安装好之后就有了。
GOPATH
(画重点) 可自定义路径的工作空间 - workspace,Go1.7 之前必须设置这个变量,且不能够与 Go 的安装目录相同。1.8 之后,GOPATH 有默认值–$HOME/go
。可以执行go env GOPATH
查看,从上面可以看到,我的 GOPATH 是/Users/chengguilu/goProjects
。其实,说白了,GOPATH 对应计算机的一个目录。
作用:用来存放 Go 代码,Go 的可运行文件,以及相应的编译之后的包文件。
Go 代码必须放在工作空间内,workspace 目录包含三个子目录
- src 存放 Go 源代码,它们被组织成包(每个目录都对应一个包)
- pkg 存放编译后生成的文件,比如:.a 文件(静态库文件)
- bin 存放编译后的可执行文件
我们可以通过 go 工具构建源码包,并将其生成的二进制文件安装到 pkg 和 bin 目录中。
我们实际操练下,上一节的Hello World
入门程序就按照这种方式存放。在 workspace 创建相关目录 src、pkg 和 bin,将写好的hello.go
保存在GOPATH/src/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
之后,在该目录中创建的文件reverse.go
并保存(文件看不懂没关系,随着学习深入,相关知识点都会讲到,这里只做演示使用):
|
|
|
|
也可以在包目录下直接执行go build
。
这个命令不会产生输出文件。想要输出的话,必须使用 go install
命令,它会将编译之后的静态文件放到工作空间的 pkg 目录中。
确认 stringutil
包构建完毕后,修改原来的 hello.go 文件并使用它:
|
|
执行go install hello/
,重新编译hello.go
,生成可执行文件hello
并执行:
在hello.go
中,我们引入了github.com/Seekload/stringutil
包,所以重新执行go intall hello/
时,stringutil
包会被自动安装。
注意:go install github.com/Seekload/stringutil
是将 stringutil.a
放到 pkg/darwin_amd64
目录中,反映出其源码目录。 darwin_amd64
这部分能帮助跨平台编译,并反映出你的操作系统和架构。
这一节涉及了包的概念,有些同学可能还不太清楚。别急,将在下节给大家讲解 Go 语言中的包。 (全文完)