Go 语言微服务框架 Kratos 入门使用

75 阅读4分钟

Go 语言微服务框架 Kratos 是国内一款流行的 Go 语言微服务框架,本文我们一起重学 Kratos 的入门使用。

  1. 准备工作:

  2. 安装 go[1]

  3. 安装 protoc[2]

  4. 安装 protoc-gen-go[3]

  5. 安装 kratos 命令行工具[4]

  6. 创建项目

Go 语言微服务框架 Kratos 提供一个命令行工具,我们可以使用命令行工具快速创建项目,生成 proto 文件,生成 gRPC Client 和 gRPC Service 代码,运行项目等。

Kratos 官方提供了一个项目模板仓库,使用命令行工具创建项目时,默认使用官方提供的项目模板仓库。

当然,它也支持自定义项目模板,我们可以把自定义项目模板提交到 Git 仓库,使用命令行工具创建项目时,通过命令行参数 -r 指定自定义项目模板的 Git 仓库地址。

使用命令行工具创建项目

我们使用 Kratos 官方提供的项目模板仓库,如果读者朋友们想要使用自定义项目模板,可以自行折腾。

kratos new helloworld
🚀 Creating service helloworld, layout repo is https://github.com/go-kratos/kratos-layout.git, please wait a moment.

正克隆到 '/Users/frank/.kratos/repo/github.com/go-kratos/kratos-layout@main'...

CREATED helloworld/.gitignore (552 bytes)
CREATED helloworld/Dockerfile (459 bytes)
// ...

阅读上面这段代码,我们可以发现使用 kratos new helloworld 创建项目时,默认使用官方提供的项目模板仓库,同时还会将项目模板仓库克隆到 $HOME/.kratos/repo/github.com/go-kratos/kratos-layout@main

如果我们再次创建项目时,命令行工具应该会默认使用克隆到本地的项目模板。所以,如果大家在更换项目模板后,发现没有生效,可以尝试删除克隆到本地的项目模板 rm -rf $HOME/.kratos

需要注意的是,自定义项目模板中的 main.go 需要存放在 /cmd/server 目录。不然命令行工具会报错,也可以在项目根目录创建 .kratos/layout.yaml,在配置文件中 cmd_dir 写自定义项目模板中 main.go 存放的目录。不过有可能踩坑!!!建议新手直接使用 Kratos 官方提供的项目模板。

Kratos 官方提供的项目模板中的 go.mod 文件,可能和我们本地的 go 版本不一致,建议手动删除 go.mod,重新执行 go init helloworld 生成。

  1. 初始化项目

创建项目后,我们需要初始化项目,Kratos 微服务框架使用依赖注入 wire,我们需要安装 wirego get github.com/google/wire/cmd/wire@latest)。

除了直接使用 go get 方式安装 wire 之外,还有 2 种方式,分别是执行 Makefile 中定义的 make init,和运行 go generate 执行项目模板代码中的注释指令 //go:generate

在项目模板中,文件 cmd/helloworld/wire_gen.go 中包含 //go:generate 注释指令:

// Code generated by Wire. DO NOT EDIT.

//go:generate go run -mod=mod github.com/google/wire/cmd/wire
//go:build !wireinject
// +build !wireinject

读者朋友们可以按照自己的习惯选择初始化项目的方式。

需要注意的是,正常情况下,该 3 种初始化项目的方式,都还需要进入 cmd/helloworld 目录中,执行 wire,生成 wire_gen.go 中的代码。

因为项目模板中,已包含 wire_gen.go 文件,并且该文件中的 //go:generate 注释指令,会执行 go run -mod=mod github.com/google/wire/cmd/wire,所以不再需要在 cmd/helloworld 目录中执行 wire

  1. 编译项目 & 运行项目

我们可以使用 go build 编译项目 go build -o ./bin/ ./...,执行二进制文件运行项目 ./bin/helloworld -conf ./configs

也可以使用命令行工具 kratos run 直接运行项目。

  1. 总结

本文从零开始讲述 Kratos 微服务框架是入门使用方式,目标是可以将项目中的示例代码 GreeterService.SayHello 方法成功运行。

读者朋友们想要新创建一个方法,可以参考「Go 语言微服务框架 Kratos 开发 HTTP API」这篇文章。

实际上,主要分为 5 步:

  1. 创建 proto 文件;
  2. 生成 gRPC Client 和 gRPC Service 代码;
  3. 注册 HTTP 服务或 gRPC 服务;
  4. 执行 wire 生成依赖注入代码;
  5. 运行代码。

推荐阅读

  1. Go 语言微服务框架 Kratos 开发 HTTP API
  2. Go 语言微服务框架 Kratos 操作 MySQL 和 Redis
  3. Go 语言微服务框架 Kratos 集成第三方库 kafka-go 操作消息队列 Kafka
  4. Go 语言微服务框架 Kratos 怎么读取 Apollo config 配置信息?
  5. Go 语言微服务框架 Kratos 服务注册与发现

参考资料[1] 安装 go: go.dev/doc/install

[2] 安装 protoc: protobuf.dev/downloads/

[3] 安装 protoc-gen-go: protobuf.dev/getting-sta…

[4] 安装 kratos 命令行工具: go-kratos.dev/docs/gettin…