问题标签 [gopath]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1043 浏览

go - 为什么 $GOPATH 经常设置在 ~/.bashrc 和 ~/.bash_profile 而不是 ~/.profile?

在 Go 的 Github 上的 wiki 页面中,它被告知设置在 ~/.bash_profile 中:

https://github.com/golang/go/wiki/Setting-GOPATH

在这个 StackOverflow 问题中,建议在 ~/.bashrc 文件中设置大多数投票最多的答案:

如何在 Ubuntu 上设置 GOPATH 环境变量?我必须编辑什么文件?

我读过 ~/.profile 可能是设置环境变量的最佳方式。是否有原因 ~/.profile 不用于设置 $GOPATH 还是只是偏好问题?

0 投票
2 回答
281 浏览

python - 直接调用与 Python 子进程时 GOPATH 的解释不同

我最近发现了 Python getpass not working on Windows 的修复:Python not working in the command line of git bash

或者至少这是我记得的关于更改我的 python 配置的最后一件事。(这适用于 Windows 10 上的 Python 3.6.1)

现在,我还将 Python 用于其他任务,这些任务只需调用子进程即可在终端上键入多个命令:

我得到错误:go: GOPATH entry is relative; must be absolute: "/c/Users/OP/work"。但是,如果我自己打字,我就不会明白go build ./src/folder。我C:\work在环境变量中设置了 GOPATH。我试过用;.

有没有办法每次都反转别名 python?或者将python的别名设置为winpty时到底发生了什么?

我在想,当我直接调用 go build 时,它是由我的用户配置文件或系统调用的。而当python的子进程调用它时,它调用的是相反的。因此,即使我在环境变量中只设置了 1 个,我也有两个 GOPATH 变量。

旁注:最近对 GOPATH 的另一个更改是更改它,C:/go因为它不能与 GOROOT 相同。由于某种原因,该错误随机弹出。它在该设置下工作了一段时间,除了在已经使用的许多其他导入包之上添加另一个导入包之外,我不记得之前进行了任何更改。

更新:type python我得到了结果:python is aliased to 'winpty python.exe'。因此,我尝试使用unalias python. 我得到的新结果是:python is hashed (/c/Users/OP/AppData/Local/Programs/Python/Python36/python).

这修复了go buildPython 子进程中的命令。但是,该别名是对使用 getpass 包的另一个 Python 问题的修复。

0 投票
1 回答
3425 浏览

go - 声明性 Jenkinsfile 中的 GOPATH

我正在为我们的 Go mono repo 在工作中设置一个 Jenkins 多分支管道。如何设置GOPATHgo 工具可以找到 Jenkins 获取 repo 的位置?

我尝试使用environment语法设置它,如下所示:

golint命令工作正常,因为它位于正确的目录中,但 go build 命令找不到根目录中的任何其他依赖项。例如,go buildmy_repo/my_app其中运行不会找到任何依赖项my_repo,比如说my_repo/my_dep.

我还尝试GOPATH在构建阶段进行设置:

但同样的事情也会发生。

编辑:我应该设置什么GOPATH

更新:当我设置GOPATHWORKSPACE

我收到一个错误:

0 投票
3 回答
5257 浏览

go - 如何管理多个项目目录的 GOPATH

来自 java 和 grails 背景,(并且在 30 年前编写了数百万行 C 语言),我看不出如何在 Windows 上使用固定的 gopath。

安装 go 创建了这个结构

由于您将希望拥有许多 go 项目,因此它们似乎必须在同一个 src/kpg/bin 目录中混合在一起,相互污染。例如

hello.exe 会运行哪个 hello.go?

除非我遗漏了一些基本的东西,否则这似乎很疯狂——所有完全独立的项目都应该共享相同的包和 bin 目录。这意味着您不知道哪些包的版本,哪些exe文件属于哪个项目,并且可能存在很大的冲突范围。我本来希望每个单独的 go 应用程序(如 java 或 grails 甚至 C)都有一个 /src、/pkg 和 /bin,而 go 路径是完全多余的,它可以相对于当前项目根目录(如 grails 中)。

为了使事情奏效,对于工作,我们必须使用不同的目录,例如

所以现在我们总共有 6 个单独的目录来存放 go 程序。每次切换到处理不同的项目时都更改路径是不可行的。我猜另一个选择是将 6 条路径添加到 GOPATH。据推测,所有 7 个 go 项目都写入相同的 pkg 和 bin 目录,这将是一场灾难。

这种情况是否有可行的解决方案(至少在 Windows 上)?

如果我们需要为每个项目添加一个 PATH 到 GOPATH,那么每个项目下的文件结构应该是什么?

比如uner xxx\go_utility6,这是一个独立的命令行go app,应该是什么结构?那里需要有一个 src 目录吗?这个目录需要 gopath 指向它吗?它需要自己的 pkg,还是应该使用 c:\users\me\pkg 目录?

0 投票
1 回答
6737 浏览

go - 目录中的代码需要导入

我有一个从存储库派生的包myproject。在项目内部,我想使用sha3包中的一些功能,但是,我需要首先将一个go文件添加到sha3包中,其中包含一些额外的功能。我想sha3在我的项目中包含这个自定义包。我将目录复制并粘贴sha3myproject目录中,在我的go代码中,我将sha3包导入为: import . "github.com/myproject/sha3". 现在,当我尝试构建myproject包时,我得到: code in directory /src/github.com/myproject/sha3 expects import "golang.org/x/crypto/sha3". 我无法理解问题所在。我检查了目录中的所有go文件sha3,它们都不需要任何导入!

0 投票
1 回答
1550 浏览

go - `go get` 命令失败:无法识别的导入路径“_/"

基本上,我的问题是,为什么在我的导入路径前加下划线?

它说import path does not begin with hostname我假设是因为它以下划线开头。

我在某处读到这可能与我搞砸了我的 GOPATH 有关,但我尝试将它移动到任何地方,在项目文件夹内、项目文件夹外、在默认位置等。

我是新来的,最近出现了几次。将不胜感激任何指导!

0 投票
1 回答
407 浏览

google-app-engine - 部署到 App Engine 时找不到包

我无法在 App Engine 上部署我的 golang 应用程序(带有echo框架)。

我有某种错误,例如:

在项目中,我有三个这样的文件:

在本地主机上一切正常

0 投票
1 回答
151 浏览

bash - 用于查找父 GOPATH 的 Bash 命令

我正在尝试编写一个脚本来处理GOPATH. 代码可能嵌套在多个目录深处。

我将在GOPATH不存在的环境中运行我的脚本。

GOPATH在 shell 中从嵌套目录中查找的简单方法是GOPATH什么?

如果我做这样的事情它会起作用

或者

但它要求我必须知道我嵌套了多少层。

0 投票
2 回答
801 浏览

google-app-engine - `gcloud app deploy` 命令选择了错误的 GOPATH

尝试使用 Cloud SQL 部署我的 GO 应用程序,gcloud app deploy但每次构建都失败,并出现未找到包的错误。不知道它是从哪里挑选的GOPATH。是否可以更改GOPATH谷歌云引擎。

我有导入语句来包含上述库。我的本地GOPATH设置为/Users/amar.jain/go/并且正在尝试使用/workplace/_gopath/

我也在使用 GO App Engine SDK。

0 投票
1 回答
271 浏览

go - go中如何合并类似的多包项目

几个组织分发同一个项目的变体,我们定期相互拉取更改。如果我们最终能够合并代码存储库,并且也许有一个由联盟管理的公共源代码树,那就太好了。但是,每个成员可能都希望选择分发他们自己的变体,而不会给客户带来太多痛苦,以防在上游处理更新产品所需的更改时遇到麻烦。

该项目由三个包组成:

  1. 图书馆
  2. 输出需要导入库的go代码的编译器可执行文件
  3. 使用#2 生成的代码并与#1 链接的实用程序可执行文件

当来回拉动更改时,一个很大的烦恼是导入路径的无故差异。我们基本上必须编辑 to 的每个import "github.com/companyA/whatever"版本import "companyB.com/whatever"。当然,这些问题会随着(喘气)相对导入路径而消失。如果我们诉诸这种异端,我们的编译器可以在生成的代码中硬编码绝对导入路径,以将最终用户与库的导入路径隔离开来。它还只需要源代码树(编译器中输出导入语句的行)中的一个无偿差异,而不是一堆。

但无论如何,我知道相对导入路径不好 - 这是一个棘手的情况。我知道这与诸如thisthis之类的问题类似,因为出于实际和政治原因,仅要求最终用户创建一个名为companyB.com并从中克隆某些内容的目录的答案companyA是行不通的。

我已经知道 go 并不能很好地适应这种情况,所以我也不是要一个灵丹妙药来让 go 处理它不能处理的事情。不幸的是,另一件事是要求客户这样做curl whatever | sh,因为这被视为过多的责任(被认为是“培训客户做危险的事情”)。也许我们可以放弃go get,让每个人都克隆到 . 下的某个中性非 DNS 名称$GOPATH/src,但我们需要在没有“标志日”的情况下执行此操作,如果代码在错误的位置,代码会突然中断。

我的问题是,是否有人成功地将 SDK 类型的项目与现有的最终用户合并,如果是,您是如何做到的,哪些有效,哪些无效?您实际上是否避免了相对导入路径或粗糙的GOPATH黑客攻击,如果是的话,是否值得?您采用了哪些机制(环境变量、配置文件、.project-config当前工作目录中的文件、滥用vendor目录、在编译时确定其绝对导入路径的代码生成包)来使这项工作顺利进行?您是否只是应付大量sed或可能gofmt -r?是否有涉及巧妙使用.gitattributesgo generate重写结帐/签入时的导入路径的技巧?