根據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
- Java 根據模板生成 PDF 檔案 以及 excel 檔案JavaExcel
- 【proto】python根據proto檔案構造message,並換為二進位制Python
- spring boot itextPdf根據模板生成pdf檔案Spring Boot
- DocTemplateTool - 可根據模板生成word或pdf檔案的工具
- 根據介面返回的二進位制流匯出檔案
- Golang - 關於 proto 檔案的一點小思考Golang
- 根據現有 C#程式碼檔案生成擴充套件程式碼檔案的想法C#套件
- 根據編輯後的init.ora文字檔案內容重新生成spfile檔案
- 第22篇 生成proto檔案bat指令碼BAT指令碼
- 根據檔案查殺linux程式Linux
- 根據需要動態include不同的檔案 (轉)
- linux 中根據檔案的大小進行檔案的查詢Linux
- 第19篇 Protocol Buffers 編譯器生成proto檔案Protocol編譯
- 根據MediatR的Contract Messages自動生成Minimal WebApi介面WebAPI
- js根據字尾判斷檔案檔案型別的程式碼JS型別
- 根據副檔名識別檔案型別(轉)型別
- 機器學習定義及基本術語(根據周志華的《機器學習》概括)機器學習
- Aidl生成的ICalc介面檔案AI
- 根據URL地址生成二維碼
- html如何根據檔案路徑顯示檔案內容(pdf)HTML
- 如何根據exp匯出檔案確定client端匯出時的字符集client
- Windows 根據埠號,找出檔案安裝位置Windows
- Scrapy:根據目錄來下載github上的檔案Github
- [Java]根據檔案取得Mime Type的各種方法(轉)Java
- 訊飛有一個可以根據描述文字自動生成PPT的AI介面,有趣AI
- grpc套路proto檔案RPC
- 根據網路連線(檔案連結)下載檔案到本地
- Python 根據id生成唯一碼Python
- PHP根據wsdl生成呼叫soapwebservice程式碼PHPWeb
- dev 根據datatable動態生成gridviewdevView
- 根據DELTA自動生成SQL語句SQL
- vue自定義表單生成器,可根據json引數動態生成表單VueJSON
- JSON定義AS專案介面JSON
- 【shell 指令碼】根據給定的網址來使用相應的協議下載檔案指令碼協議
- 根據常用漢字生成雜亂的句子 --- javaJava
- webstorm根據.eslintrc檔案自動修復WebORMEsLint
- activiti 根據模型ID匯出、預覽 xml檔案模型XML