go微服務框架Kratos筆記(一)入門教程


kratos簡介

Kratos 一套輕量級 Go 微服務框架,包含大量微服務相關功能及工具
本文基於kratos v2.0.3,windows平台,其他系統平台均可借鑒參考

環境搭建

Golang開發包
Protoc編譯工具安裝
Protoc-gen-go插件安裝
開啟module模式 並配置GOPROXY

安裝kratos

go get -u github.com/go-kratos/kratos/cmd/kratos/v2@latest

創建項目

# 創建項目模板
kratos new <Your project name>

生成的目錄結構

  .
├── Dockerfile  
├── LICENSE
├── Makefile  
├── README.md
├── api // 下面維護了微服務使用的proto文件以及根據它們所生成的go文件
│   └── helloworld
│       └── v1
│           ├── error_reason.pb.go
│           ├── error_reason.proto
│           ├── error_reason.swagger.json
│           ├── greeter.pb.go
│           ├── greeter.proto
│           ├── greeter.swagger.json
│           ├── greeter_grpc.pb.go
│           └── greeter_http.pb.go
├── cmd  // 整個項目啟動的入口文件
│   └── server
│       ├── main.go
│       ├── wire.go  // 我們使用wire來維護依賴注入
│       └── wire_gen.go
├── configs  // 這里通常維護一些本地調試用的樣例配置文件
│   └── config.yaml
├── generate.go
├── go.mod
├── go.sum
├── internal  // 該服務所有不對外暴露的代碼,通常的業務邏輯都在這下面,使用internal避免錯誤引用
│   ├── biz   // 業務邏輯的組裝層,類似 DDD 的 domain 層,data 類似 DDD 的 repo,repo 接口在這里定義,使用依賴倒置的原則。
│   │   ├── README.md
│   │   ├── biz.go
│   │   └── greeter.go
│   ├── conf  // 內部使用的config的結構定義,使用proto格式生成
│   │   ├── conf.pb.go
│   │   └── conf.proto
│   ├── data  // 業務數據訪問,包含 cache、db 等封裝,實現了 biz 的 repo 接口。我們可能會把 data 與 dao 混淆在一起,data 偏重業務的含義,它所要做的是將領域對象重新拿出來,我們去掉了 DDD 的 infra層。
│   │   ├── README.md
│   │   ├── data.go
│   │   └── greeter.go
│   ├── server  // http和grpc實例的創建和配置
│   │   ├── grpc.go
│   │   ├── http.go
│   │   └── server.go
│   └── service  // 實現了 api 定義的服務層,類似 DDD 的 application 層,處理 DTO 到 biz 領域實體的轉換(DTO -> DO),同時協同各類 biz 交互,但是不應處理復雜邏輯
│       ├── README.md
│       ├── greeter.go
│       └── service.go
└── third_party  // api 依賴的第三方proto
    ├── README.md
    ├── google
    │   └── api
    │       ├── annotations.proto
    │       ├── http.proto
    │       └── httpbody.proto
    └── validate
        ├── README.md
        └── validate.proto

編寫helloworld

# 生成proto模板
kratos proto add api/helloworld/helloworld.proto
# 生成proto源碼
kratos proto client api/helloworld/helloworld.proto
# 生成server模板
kratos proto server api/helloworld/helloworld.proto -t internal/service

此時會在helloworld文件夾下生成以下文件

helloworld.pb.go
helloworld.pb.go
//注意: http 代碼只會在 proto 文件中聲明需要提供http接口才會生成
helloworld_http.pb.go

如果在生成proto源碼過程中出現was not found or had errors問題請參考以下解決方案
proto 中外部引入proto文件問題解決方案

編譯項目並運行

# 生成所有proto源碼、wire等等
go generate ./...

可能會出現缺失github.com/google/wire/internal/wire@v0.5.0包的錯誤按照提示go get github.com/google/wire/cmd/wire一哈就行
在這里插入圖片描述
demo源碼地址
若有錯誤,請留言指正


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM