Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带GO的Visual Studio代码-多个主声明(启动设置)_Go_Visual Studio Code_Vscode Settings - Fatal编程技术网

带GO的Visual Studio代码-多个主声明(启动设置)

带GO的Visual Studio代码-多个主声明(启动设置),go,visual-studio-code,vscode-settings,Go,Visual Studio Code,Vscode Settings,我不熟悉VS代码和Golang。 我有一个现有的项目,包含两种不同的服务——我们将其中一种称为A,另一种称为B。 A和B都位于同一目录下 每当我尝试运行A或B时,都会出现以下错误: # directory/directory/directory/A&B_Directory ./A.go:12:6: main redeclared in this block previous declaration at ./B.go:18:6 我尝试使用launch.json文件,添加了以下部

我不熟悉VS代码和Golang。
我有一个现有的项目,包含两种不同的服务——我们将其中一种称为A,另一种称为B。
A和B都位于同一目录下

每当我尝试运行A或B时,都会出现以下错误:

# directory/directory/directory/A&B_Directory
./A.go:12:6: main redeclared in this block
    previous declaration at ./B.go:18:6
我尝试使用
launch.json
文件,添加了以下部分:

   {
        "name": "Launch Program",
        "type": "go",
        "request": "launch",
        "mode": "debug",
        "program": "FullDirectory/A.go"
    }
还尝试在程序属性中将设置为
${file}
和许多其他变体失败

我想找个方向,我有点迷路了。 谢谢。

免责声明:这不是推荐的方法,我同意其他人的意见,您应该将服务A和B分离到不同的目录中

回答您的问题:要启动特定文件,请使用以下配置模拟运行当前文件:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Run current file",
            "type": "go",
            "request": "launch",
            "mode": "exec",
            "program": "full-path-to-go.exe",
            "args": ["run", "${file}"],
            "showLog": true
        }
    ]
}

模式
exec
用于启动属性
程序
中给定的预构建二进制文件(必须指定
go
二进制文件的完整路径)。然后作为参数,只需将
run
和文件名(
${file}
)添加到属性
args

一个程序中不能有多个
main
。目录中的所有文件都是同一个包的一部分。如果你想让A和B成为独立的“服务”,它们需要位于不同的目录中。一个目录,一个包。再也不会了。那很简单。没有理由在这里争论。@DotnetProg我有一种模糊的感觉,那就是你可能有一种习惯,使用
go run file1[file2[…]]
在vscode之外进行编译和运行循环。“问题”在于,这是一个“降级”案例,通常不用于“真正的”Go项目。在“常规方式”处理项目时,您通常会安装[package_spec],它使用整个当前目录或遍历由
package_spec
指定的目录树,在其中构建并安装所有非最新的内容。这不适用于同一文件集中的两个文件,它们都包含包“main”中的
main()
。VSCode执行
go build
,然后运行可执行文件,这是IDE应该做的。Gogland可能正在进行
go run
,这是一种可怕的做法,应该避免——一个原因是它完全掩盖了这些问题,在一个包中包含多个
main
声明的无效包。@DotnetProg JFTR您可能会发现这些简短的声明很有意思,因为它们基本上是作为
go
工具可以使用go代码做什么的快速介绍。非常感谢,您尝试使此配置正常工作,但没有成功。同时,我会选择Gogland,等我对go有了更多的经验后,再仔细研究你的答案。@DotnetProg,错误是什么?我试过了,效果不错。您必须打开并查看要运行的文件。