kratos new 是唯一可靠起点,执行前必须确认:protoc≥3.21、protoc-gen-go=v1.31+、GO111MODULE=on且GOPROXY=https://www.php.cn/link/b6512ba2ef13d7241ba28dbf20bff5a7;生成后需验证conf.proto与conf.pb.go一致性及wire.go中InitializeApp函数存在。

kratos new 是唯一可靠起点,其他方式(手动建目录、复制模板、用 blades new)大概率失败或埋下运行时隐患。
kratos new 命令执行前必须确认的三件事
-
protoc版本 ≥ 3.21:运行protoc --version验证,低于此版本会导致api/下的.pb.go生成失败,后续kratos run报错 “undefined: xxxRequest” -
protoc-gen-go必须是 v1.31+(不是最新版):v1.32+ 因google.golang.org/protobuf接口变更,会静默跳过生成,只留下空的conf.pb.go或helloworld.pb.go -
GO111MODULE=on且GOPROXY=<a href="https://www.php.cn/link/b6512ba2ef13d7241ba28dbf20bff5a7">https://www.php.cn/link/b6512ba2ef13d7241ba28dbf20bff5a7</a>:国内环境若未设GOPROXY,kratos new会在拉取kratos-layout模板时超时,最终生成空文件夹,无报错提示
生成后立刻验证的两个关键文件
- 检查
internal/conf/conf.proto是否存在,并确认其package和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",而不是提示配置或 proto 问题
为什么别用 blades new 替代 kratos new
-
blades默认从 GitHub 远程拉取模板,国内网络常触发"template not found: kratos-layout",且无本地缓存 fallback -
kratos new内置稳定模板缓存(存于$HOME/.kratos/repo/),首次拉取成功后,后续新建项目极速完成 -
blades是增强工具链(如blades api、blades biz),它依赖kratos new生成的标准结构,不能越级替代
第一次 kratos run 失败最常卡在路径和模块上
- 进入项目根目录后,先执行
go mod tidy:官方模板的go.mod可能与你本地 Go 版本(推荐 1.21+)不兼容,tidy能自动修正依赖版本 - 不要直接在子目录(如
cmd/server)下运行kratos run:它会找不到wire.go和configs/config.yaml,报错类似"failed to load config: open configs/config.yaml: no such file" - 确保当前工作目录就是
kratos new生成的项目根目录,且该目录下有go.mod、configs/、cmd/server/三个关键路径
复杂点在于:所有环节(proto 工具链、模块状态、配置结构、wire 入口)是强耦合的,任一环节偏差都会导致启动失败,但错误提示往往不指向真实原因。


















