我正在使用 VS Code 在 MacOS 上测试这个非常简单的 Go 代码。该项目由这些示例包/文件组成:
- azure.com/myproj/cmd/service/main/main.go
- azure.com/myproj/cmd/service/service.go
- azure.com/myproj/cmd/service/tests/test.go
- azure.com/myproj/internal/common/common.go
在终端命令行上,一切都已构建并且所有测试都通过了: 去 build 。//(适用于每个文件夹) 去测试。//(测试工作并通过)
但是,从 VS 代码我有 2 个问题: 1. 从一个包到另一个包的导入根本不起作用。例如:
package test
import (
service "azure.com/myproj/cmd/service" // VS complains on this line when running the test.
)
- VS code 运行的命令不仅仅是“go test.”。它传递额外的参数,其中包括似乎是缓存路径的内容,我尝试将其从文件系统中删除,但没有效果。这是 VS.code 的输出选项卡包含的内容:
Go 测试选项卡:
unknown import path "azure.com/myproj/cmd/service":
cannot find module providing package
azure.com/myproj/cmd/service
转到选项卡:
/Users/computername/go/src/azure.com/projname/cmd/service/tests
>Finished running tool: /usr/local/bin/go test -c -o
/var/folders/q5/hm9v_6x53lj0gj02yxqtkmd40000gn/T/vscode-goKGOMES/go- code-check azure.com/myproj/cmd/service/tests
can't load package: package
azure.com/myproj/cmd/service: unknown import path
"azure.com/myproj/cmd/service": cannot find module
providing package azure.com/myproj/cmd/service
我不明白 VS 代码在上面用 hm9v_6x53lj0gj02yxqtkmd40000gn 做了什么以及我该如何改变它。它看起来像一个缓存。
所以总结一下:当通过 VS Code 进行测试时,我不明白为什么它使用运行测试的命令(上面),以及为什么它找不到导入,即常规的“go build”。和“去测试。”命令通过终端没有问题。
再一次:从终端命令行构建所有内容并通过所有测试。
似乎显然是与 VS Code 相关的问题。
最佳答案
我找到了问题的答案。 VS 不喜欢项目的文件路径结构。以下是我所做的更改:
将 main.go 从 azure.com/myproj/cmd/service/main/main.go 上移到 azure.com/myproj/cmd/service/main.go
将服务实现 (service.go) 移至内部文件夹:azure.com/myproj/internal/service/service.go
将测试移至内部文件夹: azure.com/myproj/internal/service/test/service_test.go
VS 代码如何能够在不提示找不到导入的情况下运行测试。
所以现在我的/cmd/service 文件夹中只有 main.go。一切都存在于内部,包括测试。我怀疑将 main.go 埋入子文件夹是混淆 VS Code 的原因。
关于通过 Visual Studio Code : Imports do not work. 的 GoLang 扩展从常规命令行构建和测试正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55713763/