来自 shell 脚本的假 go 环境

Fake go environment from a shell script

我正在使用带 goland 插件的 Ultimate 和 dep。我以前也在 GOPATH 外面工作。通常我不知道我正在使用 shell 脚本和 Makefile 来构建项目并且到目前为止我对此很满意。 dep 集成的想法当然迫使我在 GOPATH/src 内部工作。有什么方法可以将 IDE 配置为 运行 一个 shell 脚本,它将伪造项目环境,设置 GOPATHGOBIN 并制作 dep很高兴摆脱 ... is not within a known GOPATH/src 和 "missing" 导入。

我已经尝试通过 ./build/env.sh idea . 运行 它,但仍然缺少导入和 ... is not within a known GOPATH/src。也尝试使用项目设置,似乎没有什么可以满足 gep.

env.sh

#!/bin/sh

set -e

if [ ! -f "build/env.sh" ]; then
    echo "[=11=] must be run from the root of the repository."
    exit 2
fi

project="proj"
repositoryRoot="domain.com/username"

# Create fake Go workspace if it doesn't exist yet.
workspace="$PWD/build/_workspace"
root="$PWD"
dir="$workspace/src/$repositoryRoot"
if [ ! -L "$dir/$project" ]; then
    mkdir -p "$dir"
    cd "$dir"
    ln -s ../../../../../. $project
    cd "$root"
fi

# Set up the environment to use the workspace.
# Also add Godeps workspace so we build using canned dependencies.
GOPATH="$workspace"
GOBIN="$PWD/build/bin"

# Run the command inside the workspace.
cd "$dir/$project"
PWD="$dir/$project"

# Launch the arguments with the configured environment.
exec "$@"

生成文件

.PHONY: all test clean

GOBIN = build/bin

all:
    build/env.sh go get github.com/golang/dep/cmd/dep
    build/env.sh $(GOBIN)/dep ensure
    build/env.sh go build -v -o $(GOBIN)/proj

简短的回答是否定的,你不能。 GoLand/IntelliJ带有 Go 插件的 IDEA Ultimate 无法以预期的方式工作。他们尊重 Go Workspace 布局,你应该这样构建你的代码。

如果您从 dep 切换到 Go Modules,那么您将能够在任何地方创建您的项目,并且没有与 GOPATH 模式相同的限制。在这里您可以阅读更多关于 working with Go Modules.

的信息