问题标签 [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.
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 还是只是偏好问题?
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 build
Python 子进程中的命令。但是,该别名是对使用 getpass 包的另一个 Python 问题的修复。
go - 声明性 Jenkinsfile 中的 GOPATH
我正在为我们的 Go mono repo 在工作中设置一个 Jenkins 多分支管道。如何设置GOPATH
go 工具可以找到 Jenkins 获取 repo 的位置?
我尝试使用environment
语法设置它,如下所示:
该golint
命令工作正常,因为它位于正确的目录中,但 go build 命令找不到根目录中的任何其他依赖项。例如,go build
在my_repo/my_app
其中运行不会找到任何依赖项my_repo
,比如说my_repo/my_dep
.
我还尝试GOPATH
在构建阶段进行设置:
但同样的事情也会发生。
编辑:我应该设置什么GOPATH
?
更新:当我设置GOPATH
为WORKSPACE
:
我收到一个错误:
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 目录?
go - 目录中的代码需要导入
我有一个从存储库派生的包myproject
。在项目内部,我想使用sha3
包中的一些功能,但是,我需要首先将一个go
文件添加到sha3
包中,其中包含一些额外的功能。我想sha3
在我的项目中包含这个自定义包。我将目录复制并粘贴sha3
到myproject
目录中,在我的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
,它们都不需要任何导入!
go - `go get` 命令失败:无法识别的导入路径“_/"
基本上,我的问题是,为什么在我的导入路径前加下划线?
它说import path does not begin with hostname
我假设是因为它以下划线开头。
我在某处读到这可能与我搞砸了我的 GOPATH 有关,但我尝试将它移动到任何地方,在项目文件夹内、项目文件夹外、在默认位置等。
我是新来的,最近出现了几次。将不胜感激任何指导!
bash - 用于查找父 GOPATH 的 Bash 命令
我正在尝试编写一个脚本来处理GOPATH
. 代码可能嵌套在多个目录深处。
我将在GOPATH
不存在的环境中运行我的脚本。
GOPATH
在 shell 中从嵌套目录中查找的简单方法是GOPATH
什么?
如果我做这样的事情它会起作用
或者
但它要求我必须知道我嵌套了多少层。
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。
go - go中如何合并类似的多包项目
几个组织分发同一个项目的变体,我们定期相互拉取更改。如果我们最终能够合并代码存储库,并且也许有一个由联盟管理的公共源代码树,那就太好了。但是,每个成员可能都希望选择分发他们自己的变体,而不会给客户带来太多痛苦,以防在上游处理更新产品所需的更改时遇到麻烦。
该项目由三个包组成:
- 图书馆
- 输出需要导入库的go代码的编译器可执行文件
- 使用#2 生成的代码并与#1 链接的实用程序可执行文件
当来回拉动更改时,一个很大的烦恼是导入路径的无故差异。我们基本上必须编辑 to 的每个import "github.com/companyA/whatever"
版本import "companyB.com/whatever"
。当然,这些问题会随着(喘气)相对导入路径而消失。如果我们诉诸这种异端,我们的编译器可以在生成的代码中硬编码绝对导入路径,以将最终用户与库的导入路径隔离开来。它还只需要源代码树(编译器中输出导入语句的行)中的一个无偿差异,而不是一堆。
但无论如何,我知道相对导入路径不好 - 这是一个棘手的情况。我知道这与诸如this或this之类的问题类似,因为出于实际和政治原因,仅要求最终用户创建一个名为companyB.com
并从中克隆某些内容的目录的答案companyA
是行不通的。
我已经知道 go 并不能很好地适应这种情况,所以我也不是要一个灵丹妙药来让 go 处理它不能处理的事情。不幸的是,另一件事是要求客户这样做curl whatever | sh
,因为这被视为过多的责任(被认为是“培训客户做危险的事情”)。也许我们可以放弃go get
,让每个人都克隆到 . 下的某个中性非 DNS 名称$GOPATH/src
,但我们需要在没有“标志日”的情况下执行此操作,如果代码在错误的位置,代码会突然中断。
我的问题是,是否有人成功地将 SDK 类型的项目与现有的最终用户合并,如果是,您是如何做到的,哪些有效,哪些无效?您实际上是否避免了相对导入路径或粗糙的GOPATH
黑客攻击,如果是的话,是否值得?您采用了哪些机制(环境变量、配置文件、.project-config
当前工作目录中的文件、滥用vendor
目录、在编译时确定其绝对导入路径的代码生成包)来使这项工作顺利进行?您是否只是应付大量sed
或可能gofmt -r
?是否有涉及巧妙使用.gitattributes
或go generate
重写结帐/签入时的导入路径的技巧?