为何go get未将包安装至GOPATH,反而在/home创建新目录?
为什么sudo go get会在/home目录下创建go目录?
这个问题核心在于sudo执行命令时的环境变量差异,我来给你详细拆解:
问题根源
- sudo默认不继承用户环境变量:你配置的
GOPATH="/home/hadoop/gopath"是属于普通用户(hadoop)的环境变量,但当你用sudo执行命令时,会切换到root用户身份,而root的环境变量里并没有继承你的GOPATH设置。 - Go的默认GOPATH规则:当Go工具检测不到GOPATH环境变量时,会自动使用当前用户的
$HOME/go作为默认路径。root用户的HOME目录是/home,所以就自动创建了/home/go来存放下载的dep包。
解决办法
这里有几个可行的方案,你可以根据需求选择:
- 用sudo -E保留环境变量:如果必须用sudo执行,加上
-E参数让sudo继承当前用户的环境变量,命令改成这样:
这样Go就会使用你设置的sudo -E go get -u github.com/golang/dep/cmd/dep/home/hadoop/gopath,不会在/home下生成新目录了。 - 直接用普通用户安装(推荐):其实dep这类Go工具根本不需要sudo权限,直接以hadoop用户身份执行
go get就行。安装后的二进制文件会放在$GOPATH/bin下,只要把这个路径添加到你的PATH环境变量里,就能直接在终端调用dep了,这也是Go工具的标准使用方式,更安全也更合理。 - 给root配置GOPATH(不推荐):如果确实需要在root环境下使用,可以编辑root的
~/.bashrc或~/.profile文件,添加export GOPATH="/home/hadoop/gopath"。不过这种方法容易混淆用户权限,一般不建议这么做。
内容的提问来源于stack exchange,提问作者Smallnine
相关产品推荐
相关产品推荐

