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/"
        }
    ]
}

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

相关推荐
struggle202517 小时前
AxonHub 开源程序是一个现代 AI 网关系统,提供统一的 OpenAI、Anthropic 和 AI SDK 兼容 API
css·人工智能·typescript·go·shell·powershell
Mgx19 小时前
高性能 Go 语言带 TTL 的内存缓存实现:精确过期、自动刷新、并发安全
go
考虑考虑20 小时前
go格式化时间
后端·go
光头闪亮亮2 天前
ZBar 条码/二维码识别工具介绍及golang通过cmd调用ZBar从图片中批量识别二维码
go
东风t西瓜2 天前
golang项目开发环境配置
go
zhuyasen3 天前
在某些 Windows 版本,Go 1.25.x 编译出来的 exe 运行报错:此应用无法在你的电脑上运行
windows·go·编译器
用户89535603282203 天前
深入浅出 Go slices 包:类型安全、内存安全与高性能实践
go
王中阳Go3 天前
Python 的 PyPy 能追上 Go 的性能吗?
后端·python·go
gopyer4 天前
180课时吃透Go语言游戏后端开发11:Go语言中的并发编程
golang·go·游戏开发·并发编程
Java陈序员4 天前
简单好用!一款针对 IT 团队开发的文档管理系统!
mysql·docker·go