GOPATH 深度解析
2015-05-06 09:58
162 查看
本篇博客来自于
Go语言介绍
golang官方1
golang官方2
GOPATH 是golang 中的一个环境变量,了解它对了解整个golang项目的组织方式很有帮助,同时很多go 命令也会默认用到 GOPATH,所以必须牢固掌握。
原文如下:
The GOPATH environment variable is used to specify directories outside of $GOROOT that contains the source for Go progects and theire binaries.
也就是说:你的项目的源代码文件(.go文件) 和 二进制文件(:package 和 可执行文件) 都会放在GOPATH下面。 因为整个工程斗放在$GOPATH下面,所以 go 工具(比如 go install) 将会对GOPATH 下面的内容进行查找。比如 二进制的目的地,搜索 imports 的地址。
GOPATH 是一个 路径列表,指定的多个目录由 “:” 分隔,(OS X 或者Linux)或者 “;”分隔(Windows上面)。
当多个目录列出的时候, go install 或者 “go 工具” 以外的任何地方使用,第一个目录作为安装目录。 当在GOPATH的路径列表内使用这两种工具的时候,包含目录作为安装目录。(这个在下文中的例子中会存在)
对于本文档的大部分内容, $GOPATH 表示 指向路径列表中当前活动的第一个。
设置GOROOT(使用全局设置,在/etc/..中)
export GOROOT=/usr/local/go
export PATH=
使其生效
source /etc/profile
编辑当前用户的环境变量
vim ~/.bashrc
设置 GOPOAH
是其生效
此处设置了 GOPATH 为两个目录(一个用于存放第三方包,一个用户开发),如果使用
默认会安装到第一个目录 (
如果在
添加如下语句到 标准 Go makefile中 将引入所有的 $GOPATH 的pkg 目录
导入目录为 x/y/z的包的二进制文件在 (注意生成的 包的名称 )
源文件位于
仓库集成 和 创建
若你想在你的自己的代码仓库中 “import a package” 你需要使用这个package的 “full import path”。也就是说,如果你想导入 “matrix” 这个包,你需要
而不是
GOPATH设置两个目录很有用。第一个目录作为第三方包的存放位置,第二个目录作为你自己的项目。 将第三方的GOPATH放置到第一位,这样子 go install 将使用它作为默认的位置。 然后你可以在第二个 GOPATH目录下工作,并且可以使用
举例:
上例中设置的 两个目录中,目录结构如下:
.
| |
|
当使用 go 命令 搜素包的时候,它总是首先搜索
这样可以防止你 定义你自己的
(也就是顶级目录不能和
Go语言介绍
golang官方1
golang官方2
GOPATH 是golang 中的一个环境变量,了解它对了解整个golang项目的组织方式很有帮助,同时很多go 命令也会默认用到 GOPATH,所以必须牢固掌握。
原文如下:
The GOPATH environment variable is used to specify directories outside of $GOROOT that contains the source for Go progects and theire binaries.
介绍:
GOPATH 环境变量是用来指定GOROOT之外的,包含项目的源文件和他们的二进制文件的目录。也就是说:你的项目的源代码文件(.go文件) 和 二进制文件(:package 和 可执行文件) 都会放在GOPATH下面。 因为整个工程斗放在$GOPATH下面,所以 go 工具(比如 go install) 将会对GOPATH 下面的内容进行查找。比如 二进制的目的地,搜索 imports 的地址。
GOPATH 是一个 路径列表,指定的多个目录由 “:” 分隔,(OS X 或者Linux)或者 “;”分隔(Windows上面)。
当多个目录列出的时候, go install 或者 “go 工具” 以外的任何地方使用,第一个目录作为安装目录。 当在GOPATH的路径列表内使用这两种工具的时候,包含目录作为安装目录。(这个在下文中的例子中会存在)
对于本文档的大部分内容, $GOPATH 表示 指向路径列表中当前活动的第一个。
设置GOROOT(使用全局设置,在/etc/..中)
export GOROOT=/usr/local/go
export PATH=
$PATH: $GOROOT/bin
使其生效
source /etc/profile
编辑当前用户的环境变量
vim ~/.bashrc
设置 GOPOAH
export GOPATH=$HOME/p/ext:$HOME/p/dev
是其生效
source ~/.bashrc
此处设置了 GOPATH 为两个目录(一个用于存放第三方包,一个用户开发),如果使用
go 工具进行第三方包的安装
go get code.google.com/p/go-tour/gotour
默认会安装到第一个目录 (
$HOME/p/ext)
如果在
$HOME/p/dev中写代码,使用 go工具(
go install,
go build) 会将二进制包安装到
$HOME/p/dev中。
集成 GOPATH
在 OS X 或者 Linux中,加入下面的表达式到 PATH中,将会加入所有的$GOPATH/bin目录。
$(GOPATH//://bin:)/bin
添加如下语句到 标准 Go makefile中 将引入所有的 $GOPATH 的pkg 目录
`GOPATHSEP=: ifeq ($(GOHOSTOS),windows) GOPATHSEP=; endif GCIMPORTS+=-I $(subst $(GOPATHSEP),/pkg/$(GOOS)_$(GOARCH) -I , $(GOPATH))/pkg/$(GOOS)_$(GOARCH) LDIMPORTS+=-L $(subst $(GOPATHSEP),/pkg/$(GOOS)_$(GOARCH) -L , $(GOPATH))/pkg/$(GOOS)_$(GOARCH)
目录布局
导入 目录为 x/y/z的包的源文件在目录 (注意导入的包的名称)$GOPATH/src/x/y/z
导入目录为 x/y/z的包的二进制文件在 (注意生成的 包的名称 )
$GOPATH/pkg/x/y/z.a
源文件位于
$GOPATH/src/A/B的 命令 的二进制文件在 (注意生成的命令的名称)
$GOPATH/bin/B
仓库集成 和 创建 go install
项目
go install,当获取一个包,根据包的导入路径如发现URL。如果尝试
go install code.google.com/p/gomatrix/matrix
go install将从 http://code.google.com/p/gomatrix 取得源代码,并且将它克隆到仓库
$GOPATH/src/code.google.com/p/gomatrix
若你想在你的自己的代码仓库中 “import a package” 你需要使用这个package的 “full import path”。也就是说,如果你想导入 “matrix” 这个包,你需要
import "code.google.com/p/gomatrix/matrix"
而不是
import "matrix"(需要使用全名)
技巧和窍门
第三方包GOPATH设置两个目录很有用。第一个目录作为第三方包的存放位置,第二个目录作为你自己的项目。 将第三方的GOPATH放置到第一位,这样子 go install 将使用它作为默认的位置。 然后你可以在第二个 GOPATH目录下工作,并且可以使用
go 命令(在第二个GOPATH西面使用 go 命令),
go install等。
举例:
上例中设置的 两个目录中,目录结构如下:
.
--p |--ext | |--bin # 命令目录 | |--pkg # 包目录 | |–linux_amd64
| |
--github.com |–src # 源码目录
|
--github.com |–… # 源码子目录
--dev |--bin |--pkg–src
FAQ
为什么$GOPATH/src/cmd/mycmd/*.go没有编译?
当使用 go 命令 搜素包的时候,它总是首先搜索
$GOROOT。
$GOROOT中包含目录,当它在
$GOROOT中找到一个
cmd/目录的时候 它不会继续寻找 any of the GOPATH directories.
这样可以防止你 定义你自己的
math/matrix和
cmd/mycmd的包。
(也就是顶级目录不能和
$GOROOT下面的目录相同)。
相关文章推荐
- java 内存分配和String类型的深度解析
- 深度解析javascript中的浅复制和深复制
- 深度解析Java线程池的异常处理机制
- DFS深度搜索算法实现深度探究解析-以POJ 1040为例
- android游戏开发 深度解析利用位图绘制rpg地图
- Session深度解析
- 深度解析 Java 计算某个文件的 MD5 值的原理(附源码)
- Kafka深度解析
- java String 深度解析
- 深度解析Java内存原型
- 【RocketMQ源码深度解析2】源码目录结构介绍&Remoting通信层
- HashMap源码深度解析
- 深度学习框架Caffe源码解析
- 深度解析VC中的消息(上)
- jsonp协议原理深度解析
- 视频教程:Java常见面试题目深度解析!
- Java——CLASSPATH环境变量深度解析
- 深度解析Asp.Net2.0中的Callback机制(2009-02-19 15:16:57)(转载)
- Splunk和ElasticSearch深度对比解析(转)
- The internals of Python string interning(关于字符串is比较两个字符串对象的深度解析)