kratos new 创建项目常遇三类问题:模板拉取失败、proto 未自动生成、HTTP 路由 404;需指定国内镜像源、执行 make api 生成代码、检查 RegisterGreeterHTTPServer 注册与 Wire 依赖注入。

直接用 kratos new 就能创建项目,但默认模板拉取失败、生成目录结构不清晰、proto 未自动生成——这三类问题占了新手踩坑的 80%。
kratos new 命令执行失败(国内网络常见)
官方模板仓库托管在 GitHub,国内直连大概率超时或返回空目录,kratos new helloworld 卡住或报 failed to clone template 错误。
- 必须加
-r参数指定国内镜像源,例如:kratos new helloworld -r https://gitee.com/go-kratos/kratos-layout.git - 别用
git clone手动下载再改名——kratos new不仅复制模板,还会自动替换项目名、模块路径、go.mod 中的 import path,手动操作会漏掉这些替换 - 确保
$GOPATH/bin在$PATH中,否则命令找不到;验证方式:运行kratos -v能输出版本号
项目生成后 proto 文件没生成、api/ 目录为空
刚建好的项目里 api/ 下只有 helloworld/ 目录和 helloworld.proto,但没有对应的 helloworld.pb.go 和 helloworld_http.pb.go,导致 go run ./cmd 报错找不到包。
- 执行
make api(不是make build或kratos run)——这是 Kratos 模板预置的 Makefile 规则,会调用protoc+protoc-gen-go+protoc-gen-go-http三件套生成代码 - 确认已安装
protoc(≥ 3.19.0)和两个 protoc 插件:go install google.golang.org/protobuf/cmd/protoc-gen-go@latest和go install github.com/go-kratos/kratos/cmd/protoc-gen-go-http@latest - 如果
make api报plugin not found,说明插件没装进$GOBIN(默认是$GOPATH/bin),检查which protoc-gen-go是否有输出
启动时报 server listening on [::]:9000 但访问 http://localhost:8000 404
项目能跑起来,日志也显示 HTTP server 启动了,但根路径或 /helloworld/kratos 返回 404,不是框架问题,而是路由没注册上。
- 检查
internal/server/http.go中是否调用了helloworld.RegisterGreeterHTTPServer—— Kratos 的 HTTP 服务靠这个函数把 proto 定义的 HTTP 映射关系注入到 mux router - 确认
internal/service/greeter.go的GreeterService实现了helloworld.GreeterServer接口,否则RegisterXXX会 panic - 别直接改
main.go启动逻辑——Kratos 使用 Wire 做依赖注入,所有 server、service、data 的初始化都应通过wire.Build统一管理,手动 new 会导致依赖缺失
最常被忽略的是:kratos 项目不是「写完代码就能跑」,而是「先生成 proto、再 wire 注入、最后启动」三步缺一不可。少走一步,就卡在某个看似无关的错误里,比如 404 其实是 service 没注入,而不是路由配置错了。


















