go grpc环境搭建遇到的问题及实现第一个案例
下载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/protogo get-v -u github.c
·
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:\gocode\src\grpc.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:\gocode\src\grpc.zozoo.net>go run client.go
2021/04/28 23:49:28 你好 gangan
目录结
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献3条内容
所有评论(0)