我在工作中遇到了一个奇怪的问题。
我有一个项目。在这个项目中有两个包,每个包在自己的文件夹中。每个文件夹都包含属于该软件包的各种.go
文件。
在文件夹A中,如果我说go build -v
,我会得到它正在构建的内容列表。
在文件夹B中,如果我说go build -v
,我会立即返回而没有输出。
这两个文件夹只包含.go
个文件,并且没有容易识别的原因,它为什么在一个文件中构建代码而在另一个文件中不构建任何内容。
go version
返回go version go1.7.5 linux/amd64
我如何在世界上弄清楚这里发生了什么?
编辑:澄清评论中提出的问题:
两个文件夹中都没有package main
。在文件夹A中,go install
会在.a
下的相应位置生成$GOPATH/pkg
个文件。在文件夹B中,go install
没有。它无所事事,无声无息。这里有些东西合法出错。
评论中建议的补救措施包括使用-a
标记(错误输出似乎完全不相关的内容)并使用-x
标记。 -x
标志应该提供非常详细的输出,而不是无用的,输出单行引用构建终止后不存在的临时文件,例如WORK=/tmp/go-build026498757
。
答案 0 :(得分:1)
您可能已经在gopath中安装了最新的版本。这可能意味着您之前在该特定包上执行了类似于go install
的操作,并且尚未修改目录中的任何文件。
检查Go的pkg
目录中是否有相应的*.a
库,看看它上面的修改时间戳是否晚于源文件的时间戳。
答案 1 :(得分:1)
您提到构建终止后临时目录消失了。
您可以使用 -work
标志保留这些目录。
来自go help build
:
The build flags are shared by the build, clean, get, install, list, run, and test commands:
...
-work
print the name of the temporary work directory and
do not delete it when exiting.
这应该有助于提供有关正在发生和未发生的事情的更多信息和背景。
答案 2 :(得分:0)
我认为go build的结果被编辑器隐藏了。(文件树)
我使用的是vscode。
vscode隐藏第一个字符为“。”的文件。
如果您移至src目录并在终端中输入data want;
set '2020data'n '2019data'n ;
run;