学习笔记:
service端:
目录结构
proto 文件:
syntax = "proto3"; package services; message ProdRequest{ int32 prod_id=1; //传入id } message ProtoResponse{ int32 prod_stock=1; //商品库存 } service ProdServic{ rpc GetProdStock(ProdRequest) returns(ProtoResponse); } //protoc --go_out=../services Prod.proto //protoc --go_out=plugins=grpc:../services Prod.proto 生成grpc 代码进入到 pb目录下 执行:
protoc --go_out=plugins=grpc:../services Prod.proto 生成grpc 代码ProdService.go 文件代码:
package services import ( "context" "fmt" ) type ProdService struct { } //实现grpc 方法 func (this *ProdService)GetProdStock(ctx context.Context, requst *ProdRequest) (*ProtoResponse, error) { fmt.Println("req=",requst.ProdId) //接收到客户端的数据 id:=requst.ProdId //逻辑处理 return &ProtoResponse{ProdStock:id},nil }service.go 文件代码:
package main import ( "google.golang.org/grpc" "grpcpro/services" "log" "net" ) func main() { rpcService := grpc.NewServer() services.RegisterProdServicServer(rpcService,new(services.ProdService)) lis,_:= net.Listen("tcp",":8081") err:=rpcService.Serve(lis) if err!=nil{ log.Panic(err) } }客户端:
目录结构: Prod.pb.go 是从serve端拷贝 Prod.pb.go来的,当然你也可以重新生成。
main.go 文件代码
package main import ( "client/services" "context" "fmt" "google.golang.org/grpc" "log" ) func main() { conn,err:=grpc.Dial(":8081",grpc.WithInsecure()) if err!=nil{ log.Panic(err) } defer conn.Close() prodClient:=services.NewProdServicClient(conn) predRequse,err:=prodClient.GetProdStock(context.Background(),&services.ProdRequest{ProdId: 12}) if err!=nil{ log.Panic(err) } fmt.Println("darta=",predRequse.ProdStock) }