Go GOPATH
golang 做包管理有两种方式,分别是 gopath 和 gomod,这两种是互斥的,不可混用。
一、GOPATH
GOPATH 是 Go 语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录(也称为工作区)。
工作目录是一个工程开发的相对参考目录,好比当你要在公司编写一套服务器代码,你的工位所包含的桌面、计算机及椅子就是你的工作区。
工作区的概念与工作目录的概念也是类似的。如果不使用工作目录的概念,在多人开发时,每个人有一套自己的目录结构,读取配置文件的位置不统一,输出的二进制运行文件也不统一,这样会导致开发的标准不统一,影响开发效率。
GOPATH 适合处理大量 Go 语言源码、多个包组合而成的复杂工程。
从 Go 1.8 版本开始,Go 开发包在安装完成后,将 GOPATH 赋予了一个默认的目录,参见下表
平台 | GOPATH 默认值 | 举例 |
---|---|---|
Windows | %USERPROGILE%/go |
C:\Users\用户名go |
Unix | $HOME/go |
/home/用户名/go |
可以通过 go env
命令查看 Go 的环境变量
1 |
|
二、GOPATH 的使用
GOPATH
目录一般为:
1 |
|
如下是一个完整的 Go 项目的开发目录:
1 |
|
设置 GOPATH 后,工程中使用 import 的根目录是 GOPATH 中的 src 目录
GOPATH 为 /Users/lepeng/GolandProjects
,工程为 /Users/lepeng/GolandProjects/src/MyApp1
那么 MyApp1 中使用 import 导入本地包的时候,这样写:
1 |
|
也就是说,GOPATH下必须要有 src 目录,不然 import 导包的时候会找不到
import 导包规则:
先去
GOROOT/src/
路径下找对应的项目GOROOT/src/MyApp1
(系统环境变量$GOROOT
,即使用go env
命令显示的GOROOT
)如果 1 没有,就去 Project GOPATH
Project GOPATH/src/
路径下找Project GOPATH/src/MyApp1
如果 2 还没找到,就去 Global GOPATH 路径下找(系统环境变量
$GOPATH
,即使用go env
命令显示的GOPATH
)
三、GoLand 设置 GOPATH
图中的 Global GOPATH 代表全局 GOPATH,一般来源于系统环境变量中的 GOPATH;
Project GOPATH 代表项目所使用的 GOPATH,该设置会被保存在工作目录的 .idea 目录下,不会被设置到环境变量的 GOPATH 中,但会在编译时使用到这个目录。
建议在开发时填写项目 GOPATH,每一个项目尽量只设置一个 GOPATH,不使用多个 GOPATH 和全局的 GOPATH。
否则可能会出现如下麻烦:
1 |
|