如何在vscode launch.json中编译多个go文件?

How to compile multiple go files in vscode launch.json?


问题

如果我有几个go文件需要放在主包中,我怎样才能指定它们在 launch.json中被编译?我想把它们重构为包。但这个项目很抵触。

也就是说,要在命令行上运行它们,我必须使用:

go run main.go stuff.go other.go

我如何在 launch.json 文件中包括这个?

{
    "name": "Launch myprog",
    "type": "go",
    "request": "launch",
    "mode": "debug",
    "program": "${workspaceRoot}/cmd/myprog/main.go",
     "args": ["param"]
},

我已经尝试了明显的方法。我想做一些调试工作。

那么......我如何在 launch.json 中指定编译文件夹中的软件包,而不是只编译一个特定的文件?

如果 go run main.go 等同于 "program": "${workspaceRoot}/cmd/myprog/main.go"

那么, go run . 等同于什么? "program": "${workspaceRoot}/cmd/myprog/[?????]"

因为明显的方法对我不起作用。

谢谢

Go build/run不是在文件级别操作,而是在包级别操作。
文档很清楚 go build 的参数是一个 。你在命令行上的例子 s 应该 go run .
帮你自己一个忙,忘记有一个 go run 命令。它不是你认为的应该用来做什么,它的作用也不是你认为的那样,对于新手来说,它是不可能正确的。
我理解文件与包的事情... 但我的问题比这更简单。假设在命令行上的 "go run ... "编译了软件包 "main "文件夹中的*.go... 上面launch.json文件中的 "program "一行的对应关系是什么?因为"${workspaceRoot}/cmd/myprog/"不起作用。
@PrecisionPete launch.json 是用于调试的,如果你的目的是在VSCode中自动运行像 go run 这样的命令,为什么不使用 任务 来代替?
答案1

我相信你在问题中混淆了一些概念,所以让我试着一步步回答:

  • vscode 中, launch.json 文件是由vscode自动创建的,以帮助它进行调试,它不是go语言的一部分,它不定义你的应用程序将如何运行或将被编译。更多的参考资料请看 如何用Visual Studio Code调试Go代码

  • 编译 你的应用程序( go build )意味着所有与特定包有关的文件将被转化为二进制文件。看看这篇文章 ,了解包是如何与你的应用程序编译相联系的。

  • 运行 你的应用程序可以用 go run 来完成,它的效果几乎与编译相同,只是这个命令不会生成你最终的可共享二进制文件。检查 go run vs go build

现在, 关于你的问题 ,如果你需要在vscode上启用适当的调试,看看 gopls-vscode ,但是如果你的代码因为依赖其他文件/包而不能编译,那么看看上面提到的关于包的教程。

我希望我可以给你一些帮助。

我感谢你的详细回答。但你忽略了我的实际问题。你能不能再看一下?这个程序很好。我缺少的是 launch.json 的语法。谢谢。