通过 Visual Studio Code : Imports do not work. 的 GoLang 扩展从常规命令行构建和测试正常

标签 go visual-studio-code vscode-settings

我正在使用 VS Code 在 MacOS 上测试这个非常简单的 Go 代码。该项目由这些示例包/文件组成:

  1. azure.com/myproj/cmd/service/main/main.go
  2. azure.com/myproj/cmd/service/service.go
  3. azure.com/myproj/cmd/service/tests/test.go
  4. 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.
)
  1. 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 不喜欢项目的文件路径结构。以下是我所做的更改:

  1. 将 main.go 从 azure.com/myproj/cmd/service/main/main.go 上移到 azure.com/myproj/cmd/service/main.go

  2. 将服务实现 (service.go) 移至内部文件夹:azure.com/myproj/internal/service/service.go

  3. 将测试移至内部文件夹: 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/

相关文章:

pointers - 如何将接口(interface)转换为结构

go - 我们可以在goroutine中实现goroutine吗?

http - 在 Golang 中处理并发 HTTP 请求

google-app-engine - 如果没有小数,Google Cloud Datastore 会将 float 存储为 int,我该如何解析它?

webview - 如何修复 : "exports is not defined" & "require is not defined" error when importing package from vscode webview extension

docker - VSCode Docker扩展无法连接到Docker计算机

ssl - 错误 : unable to verify the first certificate/How to trust all certificates?

visual-studio-code - VS Code 的设置 html.format.unformatted 有什么作用?

python - Visual Studio Code - 删除 pylint

python - 如何在 vscode IDE 的调试器中使用 pdb(Python 调试器)?