kratos如何在vscode下面配置调试

go语言的神奇特性

go语言有一个神奇的特点,那就是运行go run main.go命令的时候,如果main.go还引用了main包下面的utils.go的hello方法,那么就会报错:

bash 复制代码
cmd/kratos_demo/main.go:77:23: undefined: hello

翻译成更容易理解的话就是:在默认的情况下,go不允许在main.go文件中导入同包的其他文件。

要解决这个问题,通常的解决方案是,把引用到的全部都加到go run的参数里面:

bash 复制代码
go run main.go utils.go

或者

bash 复制代码
go run *.go

kratos框架如何解决这个问题

如果想在kratos框架成功启动,通常使用kratos run命令

bash 复制代码
kratos run

另外,你还可以这样做:

bash 复制代码
go run cmd/kratos_demo/main.go cmd/kratos_demo/wire_gen.go -conf configs/config.yaml

但是,如果你使用go run *.go的方式启动,就会报错:

bash 复制代码
> go run cmd/kratos_demo/*.go -conf configs/config.yaml

# command-line-arguments
cmd/kratos_demo/wire_gen.go:26:6: wireApp redeclared in this block
        cmd/kratos_demo/wire.go:21:6: other declaration of wireApp

为什么会这样?因为在相同的目录下,有wire.go和wire_gen.go,它们都有相同的wireApp方法,因此会报错。

vscode如何设置kratos的调试?

在vscode的调试配置在launch.json文件中。

错误方案一:program参数设置多个文件的?

json 复制代码
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Package",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "program": "./cmd/kratos_demo/main.go ./cmd/kratos_demo/wire_gen.go",
            "args": ["-conf", "./configs/config.yaml"]
        }
    ]
}

这样设置vscode会报错,因为program参数只能接受一个文件。

错误方案二:把./cmd/kratos_demo/wire_gen.go放到args中

json 复制代码
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Package",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "program": "./cmd/kratos_demo/main.go",
            "args": ["./cmd/kratos_demo/wire_gen.go", "-conf", "./configs/config.yaml"]
        }
    ]
}

这样会报错:

bash 复制代码
Build Error: go build -o /Users/xxx/workspace/kratos_demo/cmd/kratos_demo/__debug_bin -gcflags all=-N -l ./main.go
# command-line-arguments
./main.go:77:23: undefined: wireApp (exit status 2)

正确方案

json 复制代码
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Package",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "program": "./cmd/kratos_demo/"
        }
    ]
}

这样就能愉快的进行调试啦。

相关推荐
江湖十年5 小时前
Go 语言中 YAML to JSON 踩坑笔记
后端·go·json
程序员爱钓鱼10 小时前
第一个 Go 程序:Hello World
前端·后端·go
名字还没想好☜10 小时前
Go 的 select 实战:超时、非阻塞收发与优雅退出的三个套路
开发语言·数据库·golang·go·并发
Java开发追求者1 天前
Go环境开发配置
go·go环境开发配置·环境开发配置
程序员爱钓鱼1 天前
配置 GoLand 与 VS Code 开发环境
前端·后端·go
fcu3dx2 天前
Go + PostgreSQL 餐饮SaaS后端架构:从单体到多租户的实战重构
go
程序员爱钓鱼2 天前
Go 开发环境安装(Windows、macOS、Linux)
后端·面试·go
ArixBit3 天前
用 Go 手撸 Agent 框架 #11:工具从哪里来——内置工具、MCP 与 Skills
go·agent
程序员爱钓鱼3 天前
为什么学习 Go?Go 能做什么?
后端·面试·go
用户095367515834 天前
在系统的学习 redis 前的疑惑
redis·go