基于Protobuf定义接口规范,通过pbgo提供的插件生成RPC和REST相关代码。
创建hello.proto文件,定义接口规范:
syntax = "proto3"; package hello_pb; import "github.com/chai2010/pbgo/pbgo.proto"; message String { string value = 1; } service EchoService { rpc Echo (String) returns (String) { option (pbgo.rest_api) = { get: "/echo/:value" }; } }
用pbgo插件生成代码:
$ protoc -I=. -I=$(GOPATH)/src --pbgo_out=. hello.proto
创建REST服务:
type EchoService struct{} func (p *EchoService) Echo(request *hello_pb.String, reply *hello_pb.String) error { *reply = *request return nil } func main() { router := hello_pb.EchoServiceHandler(new(EchoService)) log.Fatal(http.ListenAndServe(":8080", router)) }
测试REST服务:
$ curl localhost:8080/echo/gopher {"value":"gopher"} $ curl localhost:8080/echo/gopher?value=cgo {"value":"cgo"}
详细的例子请参考:https://github.com/chai2010/pbgo/blob/master/examples/hello.p