00:初始化项目
安装kratos及相关工具
1、kratos 安装
go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
kratos -v
# kratos version v2.6.2
go install github.com/google/wire/cmd/wire@latest
4、安装 buf buf是一个用于管理和构建Protocol Buffers(protobuf)定义文件的命令行工具。它提供了一种简单而强大的方式来验证、格式化和构建protobuf定义文件,以及生成相关的代码。
go install github.com/bufbuild/buf/cmd/buf@v1.23.1
buf --version
创建项目
使用 kratos new 命令创建并启动一个hello world 项目:
kratos new kratos-admin
cd kratos-admin
// 下载相关依赖
go mod tidy
// 构建
go get github.com/google/wire/cmd/wire@latest
go generate ./...
// 运行项目
kratos run
{
"message": "Hello beginner"
}
目录结构与介绍
- api 下面维护了微服务使用的proto文件以及根据它们所生成的go文件;如果proto文件比较多,可以将proto文件和生产的go文件分目录存放,比如proto目录存放proto源文件,proto上层目录存生成文件
- cmd 服务启动的入口文件
- configs 配置文件;一般用来本地调试,生产建议使用配置文件管理工具
- internal 业务逻辑代码,使用internal避免错误引用
- internal/biz 业务逻辑的组装层
- internal/conf 内部使用的config的结构定义,使用proto格式生成
- internal/data 业务数据访问,包含 cache、db 等封装,实现了 biz 的 repo 接口
- internal/server http和grpc实例的创建和配置
- internal/service 实现了 api 定义的服务层
- internal/biz 业务逻辑的组装层
- third_party api 依赖的第三方proto
从main.go 开始
打开 cmd/kratos-admin/main.go;如果你是使用Goland编辑器,第一次打开你能会有一个错误提示:找不到wireApp 方法,需要按照下图设置一下。
wireinject 是一个构建约束的标记,用于使用 github.com/google/wire 进行依赖注入的代码文件。在使用 wire 生成依赖注入代码时,会在生成的代码文件中添加 // +build wireinject 注释,以标记该文件是由 wire 工具生成的。wire 文档 https://github.com/google/wire/blob/main/docs/guide.md
main.go 中的逻辑大致分为 部分:
- 接收命令参数
- 创建日志对象 Logger
- 读取配置文件
- 创建 *kratos.App 并启动;其中 wireApp 方法有wire自动生成,生成代码在wire_gen.go。