Go 語言微服務(wù)框架 Kratos 入門使用
1.介紹
Go 語言微服務(wù)框架 Kratos 是國內(nèi)一款流行的 Go 語言微服務(wù)框架,本文我們一起重學(xué) Kratos 的入門使用。
準(zhǔn)備工作:
- 安裝 go[1]
- 安裝 protoc[2]
- 安裝 protoc-gen-go[3]
- 安裝 kratos 命令行工具[4]
2.創(chuàng)建項目
Go 語言微服務(wù)框架 Kratos 提供一個命令行工具,我們可以使用命令行工具快速創(chuàng)建項目,生成 proto 文件,生成 gRPC Client 和 gRPC Service 代碼,運(yùn)行項目等。
Kratos 官方提供了一個項目模板倉庫,使用命令行工具創(chuàng)建項目時,默認(rèn)使用官方提供的項目模板倉庫。
當(dāng)然,它也支持自定義項目模板,我們可以把自定義項目模板提交到 Git 倉庫,使用命令行工具創(chuàng)建項目時,通過命令行參數(shù) -r 指定自定義項目模板的 Git 倉庫地址。
使用命令行工具創(chuàng)建項目
我們使用 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)
// ...閱讀上面這段代碼,我們可以發(fā)現(xiàn)使用 kratos new helloworld 創(chuàng)建項目時,默認(rèn)使用官方提供的項目模板倉庫,同時還會將項目模板倉庫克隆到 $HOME/.kratos/repo/github.com/go-kratos/kratos-layout@main。
如果我們再次創(chuàng)建項目時,命令行工具應(yīng)該會默認(rèn)使用克隆到本地的項目模板。所以,如果大家在更換項目模板后,發(fā)現(xiàn)沒有生效,可以嘗試刪除克隆到本地的項目模板 rm -rf $HOME/.kratos。
需要注意的是,自定義項目模板中的 main.go 需要存放在 /cmd/server 目錄。不然命令行工具會報錯,也可以在項目根目錄創(chuàng)建 .kratos/layout.yaml,在配置文件中 cmd_dir 寫自定義項目模板中 main.go 存放的目錄。不過有可能踩坑?。?!建議新手直接使用 Kratos 官方提供的項目模板。
Kratos 官方提供的項目模板中的 go.mod 文件,可能和我們本地的 go 版本不一致,建議手動刪除 go.mod,重新執(zhí)行 go init helloworld 生成。
3.初始化項目
創(chuàng)建項目后,我們需要初始化項目,Kratos 微服務(wù)框架使用依賴注入 wire,我們需要安裝 wire(go get github.com/google/wire/cmd/wire@latest)。
除了直接使用 go get 方式安裝 wire 之外,還有 2 種方式,分別是執(zhí)行 Makefile 中定義的 make init,和運(yùn)行 go generate 執(zhí)行項目模板代碼中的注釋指令 //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讀者朋友們可以按照自己的習(xí)慣選擇初始化項目的方式。
需要注意的是,正常情況下,該 3 種初始化項目的方式,都還需要進(jìn)入 cmd/helloworld 目錄中,執(zhí)行 wire,生成 wire_gen.go 中的代碼。
因為項目模板中,已包含 wire_gen.go 文件,并且該文件中的 //go:generate 注釋指令,會執(zhí)行 go run -mod=mod github.com/google/wire/cmd/wire,所以不再需要在 cmd/helloworld 目錄中執(zhí)行 wire。
4.編譯項目 & 運(yùn)行項目
我們可以使用 go build 編譯項目 go build -o ./bin/ ./...,執(zhí)行二進(jìn)制文件運(yùn)行項目 ./bin/helloworld -conf ./configs。
也可以使用命令行工具 kratos run 直接運(yùn)行項目。
5.總結(jié)
本文從零開始講述 Kratos 微服務(wù)框架是入門使用方式,目標(biāo)是可以將項目中的示例代碼 GreeterService.SayHello 方法成功運(yùn)行。
讀者朋友們想要新創(chuàng)建一個方法,可以參考「Go 語言微服務(wù)框架 Kratos 開發(fā) HTTP API」這篇文章。
實際上,主要分為 5 步:
- 創(chuàng)建 proto 文件;
- 生成 gRPC Client 和 gRPC Service 代碼;
- 注冊 HTTP 服務(wù)或 gRPC 服務(wù);
- 執(zhí)行 wire 生成依賴注入代碼;
- 運(yùn)行代碼。


































