可靠。kratos new 是唯一可靠方式,调用内置代码生成器按官方规范输出api/、internal/、configs/等目录,预置HTTP/gRPC服务和中间件,符合依赖注入与生命周期约定,可直接kratos run启动。

直接用 kratos new 生成项目,5 分钟内就能跑起带 HTTP + gRPC 的服务,不需要手动搭路由、注册中间件或写启动逻辑。
kratos new 命令生成项目结构是否可靠?
可靠。它不是脚手架模板的简单拷贝,而是调用 kratos/v2/cmd/kratos 内置的代码生成器,按官方推荐目录规范输出:包含 api/(Protobuf 定义)、internal/(分层业务逻辑)、configs/(YAML 配置)、main.go(标准启动入口)等。生成后即符合 Kratos 的依赖注入和生命周期管理约定,可直接 kratos run 启动。
- 生成的
main.go已预置http.NewServer和grpc.NewServer实例,并注入到kratos.NewApp中 -
configs/config.yaml默认启用log、metrics、tracing等中间件,无需额外配置 - 若跳过
kratos new手动建项目,极易漏掉app.ProviderSet或server.Server注册,导致服务不响应请求
kratos run 和 go run main.go 有什么区别?
kratos run 是封装了热重载、依赖注入代码生成、proto 自动生成、环境变量注入的开发命令;go run main.go 只是原生 Go 运行,会报错或静默失败。
-
kratos run自动执行make gen(生成 Protobuf 代码、DI 代码),而go run不会,缺少internal/server/grpc/server.go等文件时 panic -
kratos run默认读取-conf ./configs,并支持--env=prod切换配置源;go run需手动传参,否则config.Load()失败 - 本地开发建议始终用
kratos run;CI/CD 构建阶段才用go build+ 显式二进制启动
第一次启动后 curl 报 404 怎么办?
不是服务没起来,而是默认路由未注册或路径写错。Kratos 不自动注册任何 handler,必须显式绑定。
- 检查
api/helloworld/v1/helloworld.proto中的option (google.api.http)是否存在且路径匹配,例如:get: "/helloworld/{name}" - 确认
internal/server/http/http.go中是否调用了srv.HandlePrefix("/", helloworld.NewHelloWorldHandler(...)) - curl 地址必须与 proto 中定义的 path 完全一致,大小写、斜杠、参数占位符都不能错,例如:
curl "http://localhost:8000/helloworld/kratos" - HTTP 服务默认监听
:8000,gRPC 监听:9000,不要混用端口测试
真正卡住新手的往往不是语法或框架概念,而是生成器隐含的契约——比如 kratos run 依赖 make gen 输出的代码、proto 文件必须放在 api/ 下、配置 key 必须和结构体字段名严格对应。这些细节不报错但直接导致服务不可用,得一个个对齐。


















