资讯专栏INFORMATION COLUMN

轻松管理多个GOPATH(翻译)

hikui / 1353人阅读

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/33737.html

相关文章

  • 从Java到区块链:如何成为区块链开发人员

    摘要:最近这些天,区块链是每个开发人员的谈资。区块链技术引起了政府和各国央行的注意简而言之,一切都表明区块链前景光明。是一组旨在促进区块链应用程序开发的项目。借助区块链技术,这一过程将变得更加安全和透明。 最近这些天,区块链是每个开发人员的谈资。来自各个领域的许多软件开发商现在正试图进入区块链市场。我们与Mobilunity的区块链软件开发人员Eugene Kyselev 讨论了他是如何走出...

    W_BinaryTree 评论0 收藏0
  • 从Java到区块链:如何成为区块链开发人员

    摘要:最近这些天,区块链是每个开发人员的谈资。区块链技术引起了政府和各国央行的注意简而言之,一切都表明区块链前景光明。是一组旨在促进区块链应用程序开发的项目。借助区块链技术,这一过程将变得更加安全和透明。 最近这些天,区块链是每个开发人员的谈资。来自各个领域的许多软件开发商现在正试图进入区块链市场。我们与Mobilunity的区块链软件开发人员Eugene Kyselev 讨论了他是如何走出...

    tanglijun 评论0 收藏0
  • 如何用Docker定制你自己的Beego环境

    摘要:如何用定制你自己的环境前言学习几个月了,一直在论坛和群里潜水,一直都想写点什么回报大家积极的知识分享。关于如何使用,可以参考上面的文章和官方文档二小试牛刀,用构建一个的环境并运行程序首先来贴上我的先附上这个项目地址。 如何用Docker定制你自己的Beego环境 前言: 学习golang几个月了,一直在论坛和qq群里潜水,一直都想写点什么回报大家积极的知识分享。 前几日在CSDN上...

    alaege 评论0 收藏0
  • golang学习笔记(一)——golang基础和相关数据结构

    摘要:小白前端一枚,最近在研究,记录自己学习过程中的一些笔记,以及自己的理解。此外,结构体也支持嵌套。在函数声明时,在函数名前放上一个变量,这个变量称为方法的接收器,一般是结构体类型的。 小白前端一枚,最近在研究golang,记录自己学习过程中的一些笔记,以及自己的理解。 go中包的依赖管理 go中的切片 byte 和 string go中的Map go中的struct结构体 go中的方...

    lyning 评论0 收藏0
  • Oracle APEX 系列文章7:Oracle APEX 18.1 新特性

    摘要:提交表单页时,所有表单数据将被自动写回到数据库对应的表中,同时确保数据的完整性。所有这些都是运行时发生的,真正的所见即所得。字体集字体集是一整套图标库,旨在设计以便增强通用主题。两个家族,一个图标库新特性字体集有两种图标系列小和大。 showImg(https://segmentfault.com/img/remote/1460000015037005?w=1750&h=866); 引...

    mmy123456 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<