轻松管理多个GOPATH(翻译)

xcshuan · · 1842 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

原文链接
原文作者:Herbert Fischer
译者:xcshuan

通常我的机器里只有一个GOPATH,这也是大多数Gophers推荐的方案。然而,有时我们需要处理具有相同依赖关系的不同版本的不同项目,并且准确地更新它们。我们只是不想破坏正在工作的东西,或者将它们弄得一团糟。

快速解决方案是先将GOPATH指向其他地方,但是每次我们交换要做的项目时,都需要再次更改它。

所以我刚刚想出了一个简单的解决方案,它可以在使用bash的命令行中使用,并且也可以适用于其他shell。由于我是VIM用户,所以这个方案工作得很好。但我不推荐这种方法用于Sublime Text或其他任何使用自有方法来设置GOPATH的IDE。除非你每次都从相同的命令行shell来加载编辑器/IDE,而且这个IDE不用自己的方式来设置GOPATH,否则这个方案将无法工作。

解决方法很简单。只需在~/.bashrc(或~/.bash_profile)(注:.zshrc也可以)中包括以下代码片段,然后用source ~/.bashrc重载配置文件即可。这个片段将创建一个shell函数,该函数将使用定制命令cd覆盖内置命令cd,定制命令cd扫描所在目录,并扫描上级目录来找一个名为.gopath的文件。

cd () {
    builtin cd "$@"
    cdir=$PWD
    while [ "$cdir" != "/" ]; do
        if [ -e "$cdir/.gopath" ]; then
            export GOPATH=$cdir
            break
        fi
        cdir=$(dirname "$cdir")
    done
}

现在,您只需要在每个希望作为GOPATH的目录下创建.gopath文件,那么每次进入这个目录时,重新定义的cd函数会将当前环境的GOPATH设置为该目录。

例如,让我们创建两个目录A和B,每个都有一个子目录src,以充分说明解决方案。

$ go env GOPATH
/home/user/Go

$ mkdir -p ~/A/src && touch ~/A/.gopath
$ mkdir -p ~/B/src && touch ~/B/.gopath

$ cd ~/A/src
$ go env GOPATH
/home/user/A

$ cd ~/B/src
$ go env GOPATH
/home/user/B

没啥毛病,不过我现在想要原来的GOPATH了。

$ cd /home/user/Go
$ go env GOPATH
/home/user/B

emmmm,我们还需要在这里建立一个.gopath。

$ touch /home/user/Go/.gopath
$ cd .
$ go env GOPATH
/home/user/Go

完全没毛病了,一个不需要任何外部依赖的简单GOPATH管理方案闪亮登场。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:xcshuan

查看原文:轻松管理多个GOPATH(翻译)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1842 次点击  
加入收藏 微博
1 回复  |  直到 2018-11-05 16:55:38
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传