在golang中使用protoc

【Golang】proto生成go的相关文件

在这里插入图片描述

推荐个人主页:席万里的个人空间

1、查看proto的版本号

protoc --version

2、安装protoc-gen-go和protoc-gen-go-grpc

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latests

3、生成protobuff以及grpc的文件

 protoc --go_out=./ --go-grpc_out=./ *.proto

4、HelloWorld案例

注:在使用客户端调用服务函数的时候注意不要传nil,不然会发生panic()。

proto文件,及生成go-grpc

syntax = "proto3";
option go_package = ".;helloworld";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string msg = 1;
}

message HelloReply {
  string msg = 1;
}

client.go 客户端

package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"log"
	pb "test/yunfuwu/examples/helloworld/helloworld"
)

func main() {
	conn, err := grpc.Dial("0.0.0.0:5001", grpc.WithInsecure())
	if err != nil {
		log.Fatalf("did not connect: %v", err)
	}
	defer conn.Close()
	client := pb.NewGreeterClient(conn)

	msg := "英雄联盟"
	r, err := client.SayHello(context.Background(), &pb.HelloRequest{
		Msg: msg,
	})
	if err != nil {
		//panic(err)
	}
	fmt.Println(r.Msg)
}

server.go 服务端

package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"log"
	"net"

	pb "test/yunfuwu/examples/helloworld/helloworld"
)

type server struct {
}

func (s *server) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {
	return &pb.HelloReply{Msg: "hello " + req.Msg}, nil
}
func main() {
	lis, err := net.Listen("tcp", ":5001")
	if err != nil {
		log.Fatalf("failed to listen: %v", err)
		return
	}
	fmt.Println(":5001")
	s := grpc.NewServer()
	pb.RegisterGreeterServer(s, &server{})
	if err := s.Serve(lis); err != nil {
		log.Fatalf("failed to serve: %v", err)
	}
}
  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

席万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值