根據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
- spring boot itextPdf根據模板生成pdf檔案Spring Boot
- DocTemplateTool - 可根據模板生成word或pdf檔案的工具
- Golang - 關於 proto 檔案的一點小思考Golang
- 根據現有 C#程式碼檔案生成擴充套件程式碼檔案的想法C#套件
- 根據編輯後的init.ora文字檔案內容重新生成spfile檔案
- 根據檔案查殺linux程式Linux
- 根據需要動態include不同的檔案 (轉)
- 根據MediatR的Contract Messages自動生成Minimal WebApi介面WebAPI
- 根據副檔名識別檔案型別(轉)型別
- js根據字尾判斷檔案檔案型別的程式碼JS型別
- 機器學習定義及基本術語(根據周志華的《機器學習》概括)機器學習
- 根據URL地址生成二維碼
- Aidl生成的ICalc介面檔案AI
- html如何根據檔案路徑顯示檔案內容(pdf)HTML
- 如何根據exp匯出檔案確定client端匯出時的字符集client
- Scrapy:根據目錄來下載github上的檔案Github
- [Java]根據檔案取得Mime Type的各種方法(轉)Java
- Python 根據id生成唯一碼Python
- PHP根據wsdl生成呼叫soapwebservice程式碼PHPWeb
- dev 根據datatable動態生成gridviewdevView
- 根據DELTA自動生成SQL語句SQL
- vue自定義表單生成器,可根據json引數動態生成表單VueJSON
- 根據常用漢字生成雜亂的句子 --- javaJava
- grpc套路proto檔案RPC
- 【shell 指令碼】根據給定的網址來使用相應的協議下載檔案指令碼協議
- JSON定義AS專案介面JSON
- webstorm根據.eslintrc檔案自動修復WebORMEsLint
- activiti 根據模型ID匯出、預覽 xml檔案模型XML
- python 根據物件和方法名,返回提供這個方法的定義的類Python物件
- nodeJS根據檔案字尾名讀取檔案並返回符合檔案總數NodeJS
- 如何用 grep 命令在 UNIX 中根據檔案內容查詢檔案
- 實現poi方式生成excel檔案和web類根據路徑生成java例項的反射技術的springmvc方法的方法ExcelWebJava反射SpringMVC
- VS中根據實體生成資料庫資料庫
- 如何編寫proto型別的檔案型別
- oracle ebs 根據請求id找到對應trace 檔案Oracle
- 使用stub快速生成自定義檔案
- 根據不同的瀏覽器載入相應的CSS檔案本瀏覽器CSS