kratos new 是唯一能建出可运行 Kratos 入门项目的命令;其他方式易致空 wire.go、缺 .pb.go 或 panic,且执行前须确保 protoc≥3.21、protoc-gen-go=v1.31、GO111MODULE=on 且 GOPROXY 已配置。

kratos new 是唯一能建出可运行 Kratos 入门项目的命令,其他方式(手动建目录、复制模板、用 blades new)大概率生成空 wire.go、缺失 .pb.go 或直接 panic。
kratos new 前必须校验的三个环境项
不满足任一条件,项目骨架会静默失败——比如只建了个空目录,或后续 kratos run 报 undefined: InitializeApp 却找不到原因:
-
protoc --version必须 ≥ 3.21;低于此版本会导致api/下的.pb.go缺失字段,kratos run报undefined: xxxRequest -
protoc-gen-go必须是 v1.31(不是 v1.32+);新版因google.golang.org/protobuf接口变更,会跳过生成,只留下空的conf.pb.go -
GO111MODULE=on且GOPROXY已设为https://goproxy.cn或https://www.php.cn/link/b6512ba2ef13d7241ba28dbf20bff5a7;国内未设代理时,kratos new拉取kratos-layout模板会超时,无报错、无提示、只生成空文件夹
生成后立刻验证的两个关键文件
项目目录建出来 ≠ 能跑。90% 的首次启动失败,都卡在这两处没检查:
- 确认
internal/conf/conf.proto存在,且其go_package声明与生成的internal/conf/conf.pb.go包路径一致;否则conf.Load()会 panic,报错"unknown field 'xxx' in conf.Config" - 打开
cmd/server/wire.go,确认存在func InitializeApp();这是 Wire 依赖注入的入口函数,若被删或未生成,kratos run直接报"undefined: InitializeApp"
第一次 kratos run 失败最常卡在路径和模块上
常见现象是报 "failed to load config" 或找不到 wire.go:
- 务必在项目根目录执行
kratos run,不要进到cmd/server下运行;它需要读取configs/config.yaml和顶层wire.go - 执行
go mod tidy再跑;官方模板的go.mod可能与你本地 Go 1.21+ 不兼容,tidy会自动修正依赖版本 - 别手动删
go.mod后再go init;这会破坏kratos-layout中预置的 module 名和依赖关系,导致make api或wire gen失败
最容易被忽略的是:kratos new 生成的模板缓存位于 $HOME/.kratos/repo/,一旦网络异常导致首次拉取失败,后续所有 kratos new 都会复用损坏的缓存——此时必须手动清理该目录,而不是重试命令。











