gRPC(二)golang gRPC样例

举报
张俭 发表于 2023/12/29 17:52:12 2023/12/29
【摘要】 本文代码地址https://gitee.com/shoothzj/grpc-examples go语言实现gRPC客户端服务端 添加golang package定义option go_package = "go_grpc_examples/echo"; 安装依赖go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28go i...

本文代码地址

https://gitee.com/shoothzj/grpc-examples

go语言实现gRPC客户端服务端

添加golang package定义

option go_package = "go_grpc_examples/echo";

安装依赖

go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
go get google.golang.org/grpc

生成golang代码

protoc --go_out=echo --go_opt=paths=source_relative --go-grpc_out=echo --go-grpc_opt=paths=source_relative  --proto_path=..  ../message_proto2.proto

server侧代码

package main

import (
	"context"
	"go_grpc_examples/echo"
	"google.golang.org/grpc"
	"log"
	"net"
)

type server struct {
	echo.UnimplementedEchoProto2ServiceServer
}

func (s *server) EchoProto2(ctx context.Context, req *echo.EchoProto2Req) (*echo.EchoProto2Resp, error) {
	return &echo.EchoProto2Resp{
		StrReq:   req.StrReq,
		StrOpt:   req.StrOpt,
		StrRep:   req.StrRep,
		Int64Req: req.Int64Req,
		Int32Opt: req.Int32Opt,
		Comic:    req.Comic,
	}, nil
}

func main() {
	listen, err := net.Listen("tcp", ":10240")
	if err != nil {
		panic(err)
	}
	s := grpc.NewServer()
	echo.RegisterEchoProto2ServiceServer(s, &server{})
	log.Printf("server listening at %v", listen.Addr())
	if err := s.Serve(listen); err != nil {
		log.Fatalf("failed to serve: %v", err)
	}
}

客户端代码

package main

import (
	"context"
	"go_grpc_examples/echo"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
	"log"
	"time"
)

func main() {
	conn, err := grpc.Dial("localhost:10240", grpc.WithTransportCredentials(insecure.NewCredentials()))
	if err != nil {
		panic(err)
	}
	defer conn.Close()
	c := echo.NewEchoProto2ServiceClient(conn)

	// Contact the server and print out its response.
	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
	defer cancel()
	var strReq = "strReq"
	var strOpt = "strOpt"
	var int64Req = int64(64)
	var int32Opt = int32(32)
	comic := echo.Comic_Bleach
	r, err := c.EchoProto2(ctx, &echo.EchoProto2Req{
		StrReq:   &strReq,
		StrOpt:   &strOpt,
		StrRep:   []string{"str", "req"},
		Int64Req: &int64Req,
		Int32Opt: &int32Opt,
		Comic:    &comic,
	})
	if err != nil {
		log.Fatalf("could not greet: %v", err)
	}
	log.Printf("Greeting: %s", r)
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。