Kratos 是一套轻量级 Go 微服务框架,包含大量微服务相关框架及工具,下面介绍一下Kratos的安装启动过程。
1、环境准备
1.1、安装Go
方法一:pkg包安装
安装go1.18以上的版本即可,注意选择合适自己电脑芯片的安装包,点击下一步即可
该安装包会将Go发行版安装到 /usr/local/go 中
方法二:homebrew安装
brew install go
brew list go可以查看go的安装目录
查看是否安装成功go --version
查看环境信息go env
开启go mod go env -w GO111MODULE=on
配置环境变量
查看当前shell是zsh还是bash, 如果是bash选择编辑~/.bash_profile文件,如果是zsh选择编辑~/.zshrc 文件 dscl . -read /Users/$USER UserShell
GOROOT路径是go的安装路径,一般是/usr/local/go或者/usr/local/Cellar/go/1.18/libexec
GOPATH是Go项目的工作目录,可以自定义,这里指定为$HOME/go
GOPROXY是go get 下载依赖时使用的代理地址列表,使用逗号 (,) 或竖杠 (|) 分隔。
能够加速下载第三方包
GOPRIVATE是私有仓库,一般是公司内网的仓库地址
将$GOPATH/bin加入 $PATH 变量,这样在终端的任何路径都能使用go包的bin目录下面的工具
打开bash_profile
$ open .bash_profile
如果不存在创建bash_profile
$ vim ~/.bash_profile
编辑:
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GO111MODULE=on
export GOPROXY=http://goproxy.cn,direct
export GOPRIVATE=git.xxxx.cn/*
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
生效环境变量
source ~/.bash_profile # 如果是bash
source ~/.zshrc # 如果是zsh
1.2、安装protoc、protoc-gen-go
简介
gRPC 是一个高性能、开源、通用的RPC框架,由Google推出,基于HTTP2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言。
Protocol Buffers(Protobuf)是一种与语言、平台无关,可扩展的序列化结构化数据的数据描述语言,我们常常称其为 IDL,常用于通信协议,数据存储等等,相较于 JSON、XML,它更小、更快。
在 gRPC 开发中,我们常常需要与 Protobuf 进行打交道,而在编写了.proto 文件后,我们会需要到一个编译器,那就是 protoc,protoc 是 Protobuf 的编译器,是用 C++ 所编写的,其主要功能是用于编译.proto 文件。
针对不同的语言,还需要不同的运行时的 protoc 插件,那么对应 Go 语言就是 protoc-gen-go 插件
安装
brew install grpc
brew install protobuf
brew install protoc-gen-go
brew install protoc-gen-go-grpc
验证
protoc --version
protoc-gen-go --version
protoc-gen-go-grpc --version
1.3、安装kratos脚手架工具
kratos 是与 Kratos 框架配套的脚手架工具,kratos 能够
- 通过模板快速创建项目
- 快速创建与生成 protoc 文件
- 使用开发过程中常用的命令
go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
该命令会将编译的中间文件放在 GOPATH 的 pkg 目录下,以及将编译的可执行文件放在 GOPATH 的 bin 目录下。
ps:如果使用kratos命令提示“zsh: command not found: kratos”,是因为上面的环境变量没有配置对,没有将GOBIN目录加入到环境变量
2、创建启动官方示例项目
2.1、根据模版拉取项目
kratos new helloworld
#拉取失败可使用国内源
kratos new helloworld -r https://gitee.com/go-kratos/kratos-layout.git
2.2、启动项目
cd helloworld
# 拉取项目依赖
go mod download
# 生成所有proto源码、wire等等
go generate ./...
# 运行项目
kratos run
# 输出
INFO msg=config loaded: config.yaml format: yaml # 默认载入 configs/config.yaml 配置文件
INFO msg=[gRPC] server listening on: [::]:9000 # gRPC服务监听 9000 端口
INFO msg=[HTTP] server listening on: [::]:8000 # HTTP服务监听 8000 端口
看到以上输出的话,恭喜你,项目成功启动了!
2.3、测试接口
curl 'http://127.0.0.1:8000/helloworld/kratos'
# 输出:
{
"message": "Hello kratos"
}
curl 'http://127.0.0.1:8000/helloworld/error'
# 输出
{
"code": 404,
"reason": "USER_NOT_FOUND",
"message": "user not found: error",
"metadata": {}
}
2.4、新建一个CURD模块示例
# 添加一个proto模版,定义需要的请求体、返回体结构
kratos proto add api/server/server.proto
# 根据proto模版生成GO代码
kratos proto client api/server/server.proto
# 生成service层代码,实现定义的接口
kratos proto server api/server/server.proto -t internal/service
接下来可以自己摸索一下kratos框架的玩法了,后面我还会介绍kratos框架的启动流程、开发使用指南,敬请期待~
推荐阅读
Kratos文档
ktatos官方示例项目
protobuf官方网站
GRPC应用实战-煎鱼
Go环境变量须知