根據Golang定義的介面生成proto檔案
go2proto
不用瞭解 Protobuf 語法也能輕鬆使用 golang 開發 GRPC 服務
go2proto 可以很輕鬆的根據 Golang 定義的介面生成 proto 檔案,很大程度簡化 GRPC 服務的開發工作。當公司要使用 GRPC 開發專案的時候就不用再感嘆學不動了
show code
- 建立一個 user.go, 寫入如下內容
package server
type User interface {
Createuser(request Request) Response
}
type Request struct {
Name string
}
type Response struct {
Result string
}
- 生成 proto 檔案
在 user.go 同目錄下執行 go2proto -f user.go
就會自動在當前目錄的 proto 資料夾生成 user.proto 檔案
// Code generated by go2proto. DO NOT EDIT.
syntax = "proto3";
package proto;
service User {
rpc Createuser (Request) returns (Response) {}
}
message Request {
string Name = 1;
}
message Response {
string Result = 1;
}
是不是很簡單呢,可以完全不用瞭解 Protobuf 語法,只要用 Go 定義介面就可以
安裝
go get -u github.com/akkagao/go2proto
使用
安裝完執行 go2proto 如果能輸出一下內容則說明安裝成功
➜ go2proto git:(master) ✗ go2proto
go2proto version: go2proto/1.0.0
Usage: go2proto [-f] [-t]
Options:
-f string
source file path
-t string
proto file target path (default "proto")
-f 引數用於指定 go 介面檔案
-t 引數用於指定生成的 proto 檔案儲存的目錄
注意事項
由於這裡定義服務的 go 檔案只是用於生成 proto 檔案,建議不要在程式碼中引用這裡定義的 struct。
切記由於 proto 中的欄位順序都是有編號的,所以不要輕易刪除欄位或修改欄位順序。尤其是專案釋出後。
重要的事情說三遍:
不要刪除欄位,不要修改順序
不要刪除欄位,不要修改順序
不要刪除欄位,不要修改順序
實現方法
使用 Go 提供的原始碼解析工具把 go 檔案解析成 ast 語法樹,然後分析 ast 語法樹內容。通過模板生成 proto 檔案。
程式碼很簡單關鍵程式碼不到 300 行,有興趣可以花幾分鐘時間看一下。
參考資料:
https://www.jianshu.com/p/937d649039ec
https://segmentfault.com/a/1190000020386857
感謝以上兩篇部落格的作者
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 根據api檔案生成程式碼API
- 【proto】python根據proto檔案構造message,並換為二進位制Python
- Java 根據模板生成 PDF 檔案 以及 excel 檔案JavaExcel
- spring boot itextPdf根據模板生成pdf檔案Spring Boot
- DocTemplateTool - 可根據模板生成word或pdf檔案的工具
- 根據介面返回的二進位制流匯出檔案
- Golang - 關於 proto 檔案的一點小思考Golang
- 根據MediatR的Contract Messages自動生成Minimal WebApi介面WebAPI
- 第22篇 生成proto檔案bat指令碼BAT指令碼
- linux 中根據檔案的大小進行檔案的查詢Linux
- js根據字尾判斷檔案檔案型別的程式碼JS型別
- 第19篇 Protocol Buffers 編譯器生成proto檔案Protocol編譯
- webstorm根據.eslintrc檔案自動修復WebORMEsLint
- grpc套路proto檔案RPC
- html如何根據檔案路徑顯示檔案內容(pdf)HTML
- Windows 根據埠號,找出檔案安裝位置Windows
- Scrapy:根據目錄來下載github上的檔案Github
- nodeJS根據檔案字尾名讀取檔案並返回符合檔案總數NodeJS
- 根據URL地址生成二維碼
- Python 根據id生成唯一碼Python
- 根據網路連線(檔案連結)下載檔案到本地
- flowable 部署流程定義(從Classpath) 和 (根據ui.modeler的 modelId部署)UI
- vue自定義表單生成器,可根據json引數動態生成表單VueJSON
- 訊飛有一個可以根據描述文字自動生成PPT的AI介面,有趣AI
- activiti 根據模型ID匯出、預覽 xml檔案模型XML
- 根據常用漢字生成雜亂的句子 --- javaJava
- OpenAPI Generator,根據Swagger/OpenAPI生成程式碼的工具APISwagger
- 如何編寫proto型別的檔案型別
- 網頁根據螢幕寬度請求不同的CSS檔案網頁CSS
- 使用stub快速生成自定義檔案
- oracle ebs 根據請求id找到對應trace 檔案Oracle
- 給XML檔案定義DTDXML
- 想問一下你的那個模板檔案定義在根目錄下Template是通過什麼方式定義的?
- 【python012】Python根據頁碼處理PDF檔案的內容Python
- golang 使用 viper 讀取自定義配置檔案Golang
- Laravel-sluggable,讓你的專案 Url 更加友好,根據模型自動生成 slugLaravel模型
- PHP利用反射根據類名反向尋找類所在檔案PHP反射
- Laravel 實現自定義生成檔案命令Laravel