GoでgRPCサーバたててevansで実行するまで
goでgRPCサーバたてて、evansで叩くまでの備忘録です。
gRPCサーバ実装
一応ソースあげておきました。
grpcのインストール
go get -u google.golang.org/grpc
protoファイル作成
schema/sample.proto
syntax = "proto3"; service Sample { rpc GetSample (GetSampleRequest) returns (SampleResponse) {} } message GetSampleRequest { string sample_txt = 1; } message SampleResponse { string sample_message = 1; }
コード生成
mkdir pb cd schema protoc --go_out=plugins=grpc:../pb sample.proto
ここまででpb
配下にsample.pb.go
が生成されていると思います。
serviceレイヤ実装
service/sample.go
package service import ( "context" "github.com/ybalexdp/sample-grpc/pb" ) type SampleService struct { } func (s *SampleService) GetSample(ctx context.Context, message *pb.GetSampleRequest) (*pb.SampleResponse, error) { return &pb.SampleResponse{ Message: "Hello :" + message.Name, }, nil }
main実装
main.go
package main import ( "log" "net" "github.com/ybalexdp/sample-grpc/pb" "github.com/ybalexdp/sample-grpc/service" "google.golang.org/grpc" ) func main() { listenPort, err := net.Listen("tcp", ":2007") if err != nil { log.Fatalln(err) } server := grpc.NewServer() sampleService := &service.SampleService{} pb.RegisterSampleServer(server, sampleService) server.Serve(listenPort) }
あとは
go run main.go
するだけ。
evans導入&実行
evansインストール(mac)
brew tap ktr0731/evans brew install evans
evans起動&API実行
evans --path schema --port 2007 sample.proto ______ | ____| | |__ __ __ __ _ _ __ ___ | __| \ \ / / / _. | | '_ \ / __| | |____ \ V / | (_| | | | | | \__ \ |______| \_/ \__,_| |_| |_| |___/ more expressive universal gRPC client pb.Sample@127.0.0.1:2007>call GetSample name (TYPE_STRING) => test { "message": "Hello :test" } pb.Sample@127.0.0.1:2007>