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

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

相关推荐
Lemon程序馆1 小时前
搞懂 GO 的垃圾回收机制
后端·go
程序员爱钓鱼2 小时前
Go 语言泛型 — 泛型语法与示例
后端·面试·go
GO兔17 小时前
开篇:GORM入门——Go语言的ORM王者
开发语言·后端·golang·go
Lemon程序馆17 小时前
速通 GO 垃圾回收机制
后端·go
DemonAvenger17 小时前
Go语言中的TCP编程:基础实现与最佳实践
网络协议·架构·go
岁忧17 小时前
(LeetCode 面试经典 150 题 ) 58. 最后一个单词的长度 (字符串)
java·c++·算法·leetcode·面试·go
DemonAvenger21 小时前
深入理解Go的网络I/O模型:优势、实践与踩坑经验
网络协议·架构·go
程序员爱钓鱼1 天前
Go语言中的反射机制 — 元编程技巧与注意事项
前端·后端·go