查找go stdlib包的隐式依赖项

查找go stdlib包的隐式依赖项,go,Go,我有一个精简的环境,我想在其中使用自定义路径 printenv给了我: GOOS=linux GOROOT=/mygo GOHOSTOS=linux GOARCH=amd64 TMPDIR=/mytmp GOHOSTARCH=amd64 GOPATH=/mysrcs PWD=/home/andreas 现在,如果我尝试编译go代码,它将无法找到stdlib: could not import fmt (cannot find package "fmt" in any of: /mygo/src

我有一个精简的环境,我想在其中使用自定义路径

printenv
给了我:

GOOS=linux
GOROOT=/mygo
GOHOSTOS=linux
GOARCH=amd64
TMPDIR=/mytmp
GOHOSTARCH=amd64
GOPATH=/mysrcs
PWD=/home/andreas
现在,如果我尝试编译go代码,它将无法找到stdlib:

could not import fmt (cannot find package "fmt" in any of:
/mygo/src/fmt (from $GOROOT)
如果我找到/mygo | grep fmt,我会得到:

/mygo/pkg/linux_amd64/fmt.a

当我使用系统go(普通bash环境)时,它工作得很好。找到stdlib包需要哪些隐式依赖项?

多亏了@JimB,我才使它工作起来

我确实需要stdlib。 在线讨论是,
$GOROOT/pkg
是二进制发行版的有效用例,而
$GOPATH/pkg
可能会很快被弃用,所以要小心


如果您想提供仅二进制软件包,请演示如何创建(带注释的)
src
目录结构,以便go停止搜索源文件。

什么是“自定义go”?您总是需要可用的源代码树来编译。您能更具体地说明源代码树是什么意思吗?std lib源文件。
GOROOT/src
下的所有内容。好的,然后请您解释一下
pkg
的用途好吗?如果您仍然需要源代码,为什么要进行预编译?请将
pkg/
仅看作一个缓存。您仍然需要源代码来知道编译的工件是否是最新的,即使在非常罕见的仅二进制软件包的情况下,您仍然需要一个源文件来表明它是最新的。现在,随着即将添加的
GOCACHE
pkg
将不再被
go
工具使用。