likes
comments
collection
share

kratos如何在vscode下面配置调试

作者站长头像
站长
· 阅读数 18

go语言的神奇特性

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

cmd/kratos_demo/main.go:77:23: undefined: hello

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

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

go run main.go utils.go

或者

go run *.go

kratos框架如何解决这个问题

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

kratos run

另外,你还可以这样做:

go run cmd/kratos_demo/main.go cmd/kratos_demo/wire_gen.go -conf configs/config.yaml

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

> 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参数设置多个文件

{
    "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中

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

这样会报错:

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)

正确方案

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

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