An open API service indexing awesome lists of open source software.

https://github.com/akkagao/go2proto

根据Golang定义的接口生成proto文件
https://github.com/akkagao/go2proto

ast proto protobuf

Last synced: 6 months ago
JSON representation

根据Golang定义的接口生成proto文件

Awesome Lists containing this project

README

          

# go2proto

**不用了解Protobuf语法也能轻松使用golang开发GRPC服务**

go2proto 可以很轻松的根据Golang定义的接口生成proto文件,很大程度简化GRPC服务的开发工作。当公司要使用GRPC开发项目的时候就不用再感叹`学不动了`

## show code

- 创建一个user.go, 写入如下内容

```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 文件

```protobuf
// 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定义接口就可以

## 安装

```shell
go get -u github.com/akkagao/go2proto
```

## 使用

安装完执行 go2proto 如果能输出一下内容则说明安装成功

```shell
➜ 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

感谢以上两篇博客的作者