根據Golang定義的介面生成proto檔案

Akka發表於2019-09-21

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

感謝以上兩篇部落格的作者

更多原創文章乾貨分享,請關注公眾號
  • 根據Golang定義的介面生成proto檔案
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章