Dan*_*ill 26 bash go .bash-profile
对于我创建的每个项目,我export GOPATH={path_to_project}每次进入项目目录时都必须这样做.必须有一个更简单的方法.是不是有某种方法可以为给定目录创建.bashrc或.bash_profile文件来定义该项目的GOPATH?
例如,我有两个项目A和B.如果我在项目之间移动时没有重新定义单个GOPATH,那么两个项目的二进制文件将存储在同一个地方.更重要的是,第三方库的二进制文件将存储在同一个地方,因此我无法在每个项目的基础上维护同一个库的多个版本.
但是,如果我能够在每个项目的基础上定义GOPATH,那么所有二进制文件和第三方库都依赖于项目.这似乎是在大多数其他语言环境中处理包管理的常用方法(ruby rbenv,python vertiualenv等)
Von*_*onC 20
(2018年第二季度:请注意,对于vgo(现在的"模块")项目,GOPATH最终可能会弃用以支持基于项目的工作流程.这将避免GOPATH我在两年前提出的基于手动项目的建议
使用Go 1.11(2018年8月),GOPATH可以选配模块.
你有类似的想法表达了管理多个GOPATH迪尔斯轻松,由赫伯特·菲舍尔(hgfischer),在Linux/Unix环境(在基地的问题已经提到在上面的注释):
只需在您的
~/.bashrc(或~/.bash_profile)中包含以下代码段,然后重新加载您的shell环境即可source ~/.bashrc.
此代码段将创建一个shell函数,该函数将cd使用自定义命令覆盖内置命令,该命令扫描输入的目录,以及上面的所有其他命令,以查找名为的文件.gopath.
cd () {
builtin cd "$@"
cdir=$PWD
while [ "$cdir" != "/" ]; do
if [ -e "$cdir/.gopath" ]; then
export GOPATH=$cdir
break
fi
cdir=$(dirname "$cdir")
done
}
Run Code Online (Sandbox Code Playgroud)
现在,您只需要
.gopath在每个目录中创建一个文件,每次GOPATH进入此目录时,重新定义的cd函数都会将GOPATH当前环境设置为此目录.
2017年更新:如果您不想修改您的环境,您仍然可以在GOPATH每个项目中使用一个,src方法是在Visual Studio Code(vscode,这是一个多平台IDE)中打开该项目的文件夹,并结合扩展名" 转到Visual Studio代码 ".
在该IDE中,您可以:
GOPATH在一个名为的环境中保持全球独特性go.toolsGopath.GOPATH用一个叫做的设置来推断你的当前go.inferGopath这样,VSCode将在您的全局中安装一组工具GOPATH(您也可以在VSCode外部使用).
请参阅" 往那边走,转到扩展取决于工具上 ": ,godep,,golint ,...gurugodoc
然而,您GOPATH的项目将是src的父文件夹:
当您从IDE编译/安装项目时,这可以工作.
如果您想从命令行执行此操作,上面的原始答案仍然适用.
小智 10
您可以使用autoenv之类的工具来设置在cd进入特定目录时自动执行的脚本.
出于您的目的,示例/happy/go/path/yay/.env文件可能如下所示:
export GOPATH="/happy/go/path/yay"
export PATH="$GOPATH/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)
我会写一个脚本,它可以从当前目录推断出正确的GOPATH,然后别名go命令首先调用这个脚本.例如,一个非常简单的实现:
#!/bin/bash
# infer-gopath.sh
pwd
Run Code Online (Sandbox Code Playgroud)
然后,在.bash_aliases中(或者你保留别名的地方):
alias go='GOPATH=$(infer-gopath.sh) go'
Run Code Online (Sandbox Code Playgroud)
这设置GOPATH为infer-gopath.sh仅用于调用go命令的任何输出,因此它不会对shell产生任何持久影响.
小智 5
I know this is not very clever but I find that if I simply go to the base directory of the go project where I have the src, pkg and bin folders I can simply type:
export GOPATH=$(pwd)
Run Code Online (Sandbox Code Playgroud)
and thats it all good!
| 归档时间: |
|
| 查看次数: |
14938 次 |
| 最近记录: |