轻松管理多个GOPATH(翻译)

原文链接
原文作者: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管理方案闪亮登场。

    原文作者:xcshuan
    原文地址: https://segmentfault.com/a/1190000016910467
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞