00:初始化项目

简介
Kratos是一个Go语言实现的微服务框架,说得更准确一点,它更类似于一个使用Go构建微服务的工具箱,开发者可以按照自己的习惯选用或定制其中的组件,来打造自己的微服务。也正是由于这样的原因,Kratos并不绑定于特定的基础设施,不限定于某种注册中心,或数据库ORM等,所以您可以十分轻松地将任意库集成进项目里,与Kratos共同运作。
安装kratos及相关工具
1、kratos 安装
go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
验证是否安装成功
kratos -v
# kratos version v2.6.2
2、wine 安装
go install github.com/google/wire/cmd/wire@latest
3、安装 protoc 及 protoc-gen-go
创建项目
使用 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
至此我们已经将一个kratos 项目的骨架搭建好了,运行成功后可以访问:http:127.0.0.1:8000/helloworld/beginner 将会得到以下结果:
{
"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 中的逻辑大致分为4部分:
- 接收命令参数
- 创建日志对象 Logger
- 读取配置文件
- 创建 *kratos.App 并启动;其中 wireApp 方法有wire自动生成,生成代码在wire_gen.go。
