栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

go grpc环境搭建遇到的问题及实现第一个案例

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

go grpc环境搭建遇到的问题及实现第一个案例

1、环境搭建 官网地址
# 下载protobuf编译程序,解压下载的文件,将里面的protoc.exe文件放置在$GOPATH/bin目录下
https://github.com/protocolbuffers/protobuf/releases/tag/v3.9.0 

# 安装protobuf的go语言插件
go get  -v -u github.com/golang/protobuf/proto
go get google.golang.org/grpc
# 这个命令会在你的$GOPATH/bin目录下生成protoc-gen-go.exe
go get  -v -u github.com/golang/protobuf/protoc-gen-go
2 在项目的根目录下创建一个pb目录,在pb目录中创建hello.proto文件 proto3 语法参考
syntax = "proto3";
// 注意此处写法,
// ./ 表示生成的go文件的存放地址,会自动生成目录的。
// pb 表示生成的go文件所属的包名
option go_package = "./;pb";

message Request {
  string name = 1;
}

message Response {
  string msg = 1;
}

service HelloServer {
  rpc Say (Request) returns (Response){};
}

打开terminal工具编译hello.proto文件,使之生成hello.pb.go文件

# 进入pb目录执行
protoc --go_out=plugins=grpc:./ hello.proto

如果报如下错误,就是没有申明 option go_package = "./;pb";,这个问题困扰了我很久

protoc-gen-go: unable to determine Go import path for "hello.proto"

Please specify either:
        • a "go_package" option in the .proto source file, or
        • a "M" argument on the command line.

See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.

--go_out: protoc-gen-go: Plugin failed with status code 1.

3、创建服务端,在项目根目录下创建server.go文件
package main

import (
	"context"
	"google.golang.org/grpc"
	pb "grpc.zozoo.net/pb"
	"log"
	"net"
)

type HelloServer struct {

}

func (h *HelloServer) Say(ctx context.Context, req *pb.Request) (rsp *pb.Response,err error) {
	rsp = new(pb.Response)
	rsp.Msg = "你好 "+req.Name
	return rsp,nil
}

func NewHelloServer() *HelloServer {
	return &HelloServer{}
}

func main() {
	listen,err := net.Listen("tcp","127.0.0.1:8080")
	if err != nil {
		log.Fatal(err)
	}

	s := grpc.NewServer()

	pb.RegisterHelloServerServer(s,NewHelloServer())

	log.Println("服务注册成功,等待连接...")
	s.Serve(listen)
}

启动服务端,打印如下信息表示成功
go run server.go
E:gocodesrcgrpc.zozoo.net>go run server.go
2021/04/28 23:49:22 服务注册成功,等待连接…

4、创建客户端服务,在项目根目录下创建client.go文件
package main

import (
	"context"
	"google.golang.org/grpc"
	pb "grpc.zozoo.net/pb"
	"log"
)

func main() {
	//连接
	conn,err := grpc.Dial("127.0.0.1:8080",grpc.WithInsecure())
	if err != nil {
		log.Fatal(err)
	}

	//初始化客户端
	c := pb.NewHelloServerClient(conn)

	//调用方法
	rsp,err := c.Say(context.TODO(),&pb.Request{
		Name: "gangan",
	})

	if err != nil {
		log.Fatal(err)
	}

	log.Println(rsp.Msg)
}

启动客户端,打印如下信息表示成功
go run client.go
E:gocodesrcgrpc.zozoo.net>go run client.go
2021/04/28 23:49:28 你好 gangan

目录结

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/944994.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号