kratos简介

Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关功能及工具
本文基于kratos v2.0.3,windows平台,其他系统平台均可借鉴参考

环境搭建

Golang开发包
Protoc编译工具安装
Protoc-gen-go插件安装
开启module模式 并配置GOPROXY

安装kratos
go get -u github.com/go-kratos/kratos/cmd/kratos/v2@latest
创建项目
# 创建项目模板
kratos new <Your project name>

生成的目录结构

  .
├── Dockerfile  
├── LICENSE
├── Makefile  
├── README.md
├── api // 下面维护了微服务使用的proto文件以及根据它们所生成的go文件
│   └── helloworld
│       └── v1
│           ├── error_reason.pb.go
│           ├── error_reason.proto
│           ├── error_reason.swagger.json
│           ├── greeter.pb.go
│           ├── greeter.proto
│           ├── greeter.swagger.json
│           ├── greeter_grpc.pb.go
│           └── greeter_http.pb.go
├── cmd  // 整个项目启动的入口文件
│   └── server
│       ├── main.go
│       ├── wire.go  // 我们使用wire来维护依赖注入
│       └── wire_gen.go
├── configs  // 这里通常维护一些本地调试用的样例配置文件
│   └── config.yaml
├── generate.go
├── go.mod
├── go.sum
├── internal  // 该服务所有不对外暴露的代码,通常的业务逻辑都在这下面,使用internal避免错误引用
│   ├── biz   // 业务逻辑的组装层,类似 DDD 的 domain 层,data 类似 DDD 的 repo,repo 接口在这里定义,使用依赖倒置的原则。
│   │   ├── README.md
│   │   ├── biz.go
│   │   └── greeter.go
│   ├── conf  // 内部使用的config的结构定义,使用proto格式生成
│   │   ├── conf.pb.go
│   │   └── conf.proto
│   ├── data  // 业务数据访问,包含 cache、db 等封装,实现了 biz 的 repo 接口。我们可能会把 data 与 dao 混淆在一起,data 偏重业务的含义,它所要做的是将领域对象重新拿出来,我们去掉了 DDD 的 infra层。
│   │   ├── README.md
│   │   ├── data.go
│   │   └── greeter.go
│   ├── server  // http和grpc实例的创建和配置
│   │   ├── grpc.go
│   │   ├── http.go
│   │   └── server.go
│   └── service  // 实现了 api 定义的服务层,类似 DDD 的 application 层,处理 DTO 到 biz 领域实体的转换(DTO -> DO),同时协同各类 biz 交互,但是不应处理复杂逻辑
│       ├── README.md
│       ├── greeter.go
│       └── service.go
└── third_party  // api 依赖的第三方proto
    ├── README.md
    ├── google
    │   └── api
    │       ├── annotations.proto
    │       ├── http.proto
    │       └── httpbody.proto
    └── validate
        ├── README.md
        └── validate.proto
编写helloworld
# 生成proto模板
kratos proto add api/helloworld/helloworld.proto
# 生成proto源码
kratos proto client api/helloworld/helloworld.proto
# 生成server模板
kratos proto server api/helloworld/helloworld.proto -t internal/service

此时会在helloworld文件夹下生成以下文件

helloworld.pb.go
helloworld.pb.go
//注意: http 代码只会在 proto 文件中声明需要提供http接口才会生成
helloworld_http.pb.go

如果在生成proto源码过程中出现was not found or had errors问题请参考以下解决方案
proto 中外部引入proto文件问题解决方案

编译项目并运行
# 生成所有proto源码、wire等等
go generate ./...

可能会出现缺失github.com/google/wire/internal/wire@v0.5.0包的错误按照提示go get github.com/google/wire/cmd/wire一哈就行
在这里插入图片描述
demo源码地址
若有错误,请留言指正