如何设置GOPATH
Go语言提供两个关键路径,GOROOT 指向系统安装路径,GOPATH指向工作路径,这样的好处是,我们的工作可以和系统文件分离。
#Golang的安装路径
GOROOT = /usr/local/src/go
#开发的工作路径
GOPATH = /iw3c_com/dev/go_path
在Go1.8之前,我们安装Go,都需要手动指定GOPATH,而且不能和Go的安装目录一样,这个目录用来存放Go源码,Go的可运行文件,以及相应的编译之后的包文件。所以这个目录下面有三个子目录:src、bin、package
比如在Mac或者Linux环境中
一种是全局设置
vi /etc/profile
在文件的结尾加上
export GOPATH=/iw3c_com/dev/go_path
使配置马上生效
source /etc/profile
或者只在用户级别设置
vi ~/.bash_profile
#在文件的结尾加上, 注意我这里设置了两个GOPATH的目录
export GOPATH=/iw3c_com/dev/go_path:/iw3c_com/dev/new_go_path
#使配置马上生效
source /etc/profile
在Windows中就直接把GOPATH加到环境变量中就可以了
GOPATH=D:/gopath1;D:/gopath2;
1.8版本之后,GOLANG为GOPATH加上了默认值,也就是说不用在设置了!
Mac或者Unix系统使用 $HOME/go
Windows采用 用户目录\go
如果你非要再改的话,可以用上面的方法重新设置
注意:
go get 时默认安装到第一个GOPATH路径
go build时,有时会报同一种类型或方法不匹配,由于多个是GOPATH路径顺序不对导致的,调换一下顺序即可解决
在多项目工程中使用GOPATH
在很多与 Go 语言相关的书籍、文章中描述的 GOPATH 都是通过修改系统全局的环境变量来实现的。然而,这种设置全局 GOPATH 的方法可能会导致当前项目错误引用了其他目录的 Go 源码文件从而造成编译输出错误的版本或编译报出一些无法理解的错误提示。
比如说,将某项目代码保存在 /go/app/projectA 目录下,将该目录设置为 GOPATH。随着开发进行,需要再次获取一份工程项目的源码,此时源码保存在 /go/app/projectB 目录下,如果此时需要编译 projectB 目录的项目,但开发者忘记设置 GOPATH 而直接使用命令行编译,则当前的 GOPATH 指向的是 /go/app/projectA 目录,而不是开发者编译时期望的 projectB 目录。编译完成后,开发者就会将错误的工程版本发布到外网。
因此,建议大家无论是使用命令行或者使用集成开发环境编译 Go 源码时,GOPATH 跟随项目设定。在GoLand 集成开发环境(IDE)中的 GOPATH 设置分为全局 GOPATH 和项目 GOPATH,如下图所示。
图中的 Global GOPATH 代表全局 GOPATH,一般来源于系统环境变量中的 GOPATH;Project GOPATH 代表项目所使用的 GOPATH,该设置会被保存在工作目录的 .idea 目录下,不会被设置到环境变量的 GOPATH 中,但会在编译时使用到这个目录。建议在开发时只填写项目 GOPATH,每一个项目尽量只设置一个 GOPATH,不使用多个 GOPATH 和全局的 GOPATH。
提示
Visual Studio 早期在设计时,允许 C++ 语言在全局拥有一个包含路径。当一个工程多个版本的编译,或者两个项目混杂有不同的共享全局包含时,会发生难以察觉的错误。在新版本 Visual Studio 中已经废除了这种全局包含的路径设计,并建议开发者将包含目录与项目关联。
Go 语言中的 GOPATH 也是一种类似全局包含的设计,因此鉴于 Visual Studio 在设计上的失误,建议开发者不要设置全局的 GOPATH,而是随项目设置 GOPATH。