gRPC(二)golang gRPC样例
【摘要】 本文代码地址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)