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

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

相关推荐
君万12 小时前
【LeetCode每日一题】回溯:46. 全排列 78. 子集 39. 组合总和
算法·leetcode·go
vipxieliang18 小时前
Go 逃逸分析与内存优化:从读懂 -gcflags=“-m“ 到降低 GC 压力
go
小杨互联网2 天前
Go 现代 CLI 工具离线镜像合集
开发语言·后端·golang·开源·go·命令行
hourinX2 天前
从直接填格子到筛选图案:头像生成这部分是怎样改过来的—— gdenticon 重构日志(三)
go
我不会起名字3222 天前
Redis 从 0 到 1(十三):分布式锁被误删、锁不住?Go 无 Lua 实现 3 级防御
redis·go·分布式锁·watch·setnx
hourinX3 天前
从 v1 到 v2,我重新拆了头像生成的整条链路—— gdenticon 重构日志(二)
go
FungLeo3 天前
成为全栈·Go 后端篇·分类树与标签关系:目录变更为何需要协调
golang·go·gorm·数据库事务·分类树·成为全栈
FungLeo3 天前
成为全栈·Go 后端篇·文章查询与展示投影:安全分页、排序和软删除
golang·go·gorm·分页查询·成为全栈·sql安全
KevinAshen674 天前
用 Go 修复旧下载工具:从接口 403 到凭证截断的完整复盘
go·github
FungLeo5 天前
成为全栈·Go 后端篇·跨语言认证兼容:Node 与 Go 如何互认 JWT 和密码
golang·go·jwt·身份认证·成为全栈·bcrypt