Go kratos/go-zero 微服务框架入门

120 阅读2分钟

先来看下各个框架的情况

image.png

image.png

image.png

image.png

综上结论:

大项目优选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 调用