如何配置VSCode的launch.json让Go项目在根目录生成可执行文件?
问题描述
项目结构如下:
-cmd -debug - main.go -prod - main.go -.env
使用命令go build .\cmd\debug\main.go时,Go编译器会在根目录生成main.exe,运行.\main.exe可通过os.Open(".env")读取根目录的.env配置文件。
但使用如下launch.json在VSCode中启动项目时:
{ "version": "0.2.0", "configurations": [ { "name": "Launch Debug", "type": "go", "request": "launch", "mode": "auto", "program": "./cmd/debug", } ] }
main.exe会生成在/cmd/debug目录下,导致无法通过os.Open(".env")访问.env文件。需要配置VSCode解决该问题。
解决方案
有两种可行的配置方式:
方式一:指定输出目录到项目根目录
修改launch.json,添加outputDirectory字段,将编译产物输出到项目根目录:
{ "version": "0.2.0", "configurations": [ { "name": "Launch Debug", "type": "go", "request": "launch", "mode": "auto", "program": "./cmd/debug", "outputDirectory": "${workspaceFolder}" } ] }
${workspaceFolder}是VSCode内置变量,代表当前项目根目录,配置后编译生成的main.exe会直接放在根目录,和手动执行go build的效果一致。
方式二:设置程序运行的工作目录
如果不需要改变exe生成位置,可通过cwd字段指定程序运行时的工作目录为项目根目录,让os.Open(".env")能正确定位文件:
{ "version": "0.2.0", "configurations": [ { "name": "Launch Debug", "type": "go", "request": "launch", "mode": "auto", "program": "./cmd/debug", "cwd": "${workspaceFolder}" } ] }
这种配置下,exe仍会生成在cmd/debug目录,但程序运行时会以根目录作为当前工作路径,从而正常读取.env文件。
内容的提问来源于stack exchange,提问作者Aleksei Andrianov
相关产品推荐
相关产品推荐

