先来看下各个框架的情况
综上结论:
大项目优选go-zero、kratos,小项目选gin。go-zero 比 kratos 上手容易
按照我的倔脾气,先难后易
Kratos 入门
1. api/ - API 定义层(接口契约)
-
作用:定义 Proto 文件,描述接口的输入输出参数,鲁有铭
-
示例:api/book-production/v1/book/book.proto
-
内容:
-
Service 定义(方法签名)
-
HTTP/gRPC 路由映射
-
Request/Response 消息结构
-
2. internal/service/ - 服务层(业务入口)
-
作用:实现 Proto 定义的接口,处理请求参数,调用业务逻辑
-
示例:internal/service/book.go
-
职责:参数校验、DTO 转换、调用 biz 层
3. internal/server/ - 服务器层(路由注册)
- 作用:配置 HTTP/gRPC 服务器,注册路由
- 示例:internal/server/http.go
- 职责:中间件、服务注册、服务器配置
4. internal/biz/ - 业务逻辑层 ⭐
-
作用:真正的业务逻辑在这里实现
-
示例:internal/biz/greeter.go
-
职责:业务规则、流程编排、领域模型
5. internal/data/ - 数据访问层
-
作用:数据库操作、外部 API 调用
-
示例:internal/data/greeter.go
-
职责:CRUD、缓存、第三方服务调用
🔄 标准开发流程
1. 修改 api/*.proto (定义接口)
2. make api (生成代码)
3. 实现 service/* (实现接口,调用 biz)
4. 实现 biz/* (编写业务逻辑)
5. 实现 data/* (数据访问)
6. 注册到 server/* (注册路由)
7. make generate (生成 wire 依赖)
🛠️ 你的修改需要重新生成代码
你修改了 proto 文件,需要重新生成:
Auto-Ran command: cd, make
\$ cd /Users/tal/go.com/go-web-service &&
make api
--go-http_out=paths=source_relative:./api \
--go-grpc_out=paths=source_relative:./api \
--openapi_out=fq_schema_naming=true,default_response=false:. \
api/helloworld/v1/error_reason.proto api/helloworld/v1/greeter.proto api/book-production/v1/book/book.proto
Thoughtfor 2s
Auto-Ran command: cd, make
mkdir -p bin/ && go build -ldflags "-X main.Version=f23faf9" -o ./bin/ ./...
Thoughtfor 1s
Auto-Ran command: curl
{"message":"Hello World 11123","code":200} % Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 42 100 42 0 0 60957 0 --:--:-- --:--:-- --:--:-- 42000
Run Everything
Success
Thoughtfor 1s
完美!✅ 你的修改已经生效了!
📊 完整的架构和数据流向
让我用你的 Book 例子来说明完整的调用链:
Kratos 框架请求处理流程
第 1 步:定义接口
api/book.proto
- 定义接口:GET /book/get
- 定义结构:CreateBookRequest, CreateBookReply
- 执行 make api 生成代码
第 2 步:注册路由
internal/server/http.go
- 注册路由:bookv1.RegisterBookHTTPServer()
- 配置中间件、服务器参数
- HTTP 请求从这里进入
第 3 步:业务处理 ⭐
internal/service/book.go (你当前的业务代码)
- func CreateBook() - 处理请求
- 返回:Message: "Hello World 11123", Code: 200
- 适合简单业务逻辑
第 4 步:复杂业务逻辑(可选)
internal/biz/book.go (目前还没有)
- 权限检查
- 业务规则
- 流程编排
- 用于复杂业务场景
第 5 步:数据持久化(可选)
internal/data/book.go (目前还没有)
- 数据库 CRUD 操作
- 缓存处理
- 外部 API 调用