gRPC之.proto生成go文件并创建grpc服务端

Posted 程序彤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gRPC之.proto生成go文件并创建grpc服务端相关的知识,希望对你有一定的参考价值。

  1. 第一次生成:protoc --go_out=…/services Product.proto
  2. 修改proto后重新生成:protoc --go-grpc_out=…/services Product.proto
    在这里插入图片描述
  3. 创建ProductService.go
package proto

import "context"

type ProdService struct {

}

func (this *ProdService) mustEmbedUnimplementedProdServiceServer() {
	panic("implement me")
}

func(this *ProdService) GetProdStock(context.Context, *ProdRequset) (*ProdResponse, error){

	return &ProdResponse{ProdStock: 20},nil
}

  1. 创建grpc服务端,server.go
package main

import (

	"google.golang.org/grpc"
	"learnProto/services/proto"
	"net"
)

func main(){
	rpcServer := grpc.NewServer()
	proto.RegisterProdServiceServer(rpcServer,new(proto.ProdService))
	listen, _ := net.Listen("tcp", ":8081")
	rpcServer.Serve(listen)
}
  1. 创建客户端 client.go
package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"learnProto/services/proto"
	"log"
)

func main(){
	conn, err := grpc.Dial(":8081",grpc.WithInsecure())
	if err!=nil {
		log.Fatal(err)
	}
	defer conn.Close()
	productClient := proto.NewProdServiceClient(conn)
	productRes, err := productClient.GetProdStock(context.Background(), &proto.ProdRequset{
		ProdId: 66,
	})
	if err!=nil{
		log.Fatal(err)
	}
	fmt.Println(productRes.ProdStock)
}

以上是关于gRPC之.proto生成go文件并创建grpc服务端的主要内容,如果未能解决你的问题,请参考以下文章

protoc编译器使用 grpc 插件编译 .proto 文件

go grpc

gRPC在Go中的使用

gRPC在Go中的使用

Go使用gRPC的入门指南

使用 protobuf-net.Grpc 生成通用服务的 .proto 文件