目录
1、获取gRPC和Protobuf依赖
2、安装protobuf编译器
3、安装两个插件
4、编译proto文件
5、服务端
6、客户端
7、结果展示
1、获取gRPC和Protobuf依赖
go get github.com/golang/protobuf/proto
go get google.golang.org/grpc
go get github.com/golang/protobuf/protoc-gen-go
goLand配置
2、安装protobuf编译器
Release Protocol Buffers v21.6 · protocolbuffers/protobuf · GitHubProtocol Buffers - Google's data interchange format - Release Protocol Buffers v21.6 · protocolbuffers/protobufhttps://github.com/protocolbuffers/protobuf/releases/tag/v21.6下载
创建文件夹
sudo mkdir /usr/local/proto
unzip protoc-21.6-linux-x86_64.zip
配置环境变量
sudo vi /etc/profile
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:/usr/local/proto/bin
export PATH=$PATH:/usr/local/proto/include
export PATH=$PATH:/home/cjs/go/bin
再执行下面命令,然后重启
source /etc/profile
重启之后,检查时候成功
protoc --version
3、安装两个插件
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
4、编译proto文件
目录结构:
proto文件
syntax = "proto3"; // 指定proto版本
package hello; // 指定默认包名
// 指定golang包名
option go_package = "./hello";
// 定义Hello服务
service Hello {
// 定义SayHello方法
rpc SayHello(HelloRequest) returns (HelloResponse) {}
}
// HelloRequest 请求结构
message HelloRequest {
string name = 1;
}
// HelloResponse 响应结构
message HelloResponse {
string message = 1;
}
进入下面文件夹下:
然后执行
protoc --go_out=./ --go_opt=paths=source_relative --go-grpc_out=./ --go-grpc_opt=paths=source_relative hello.proto
生成
5、服务端
package main
import (
"fmt"
"net"
pb "awesomeProject/proto/hello" // 引入编译生成的包
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/grpclog"
)
const (
// Address gRPC服务地址
Address = "127.0.0.1:50052"
)
// 定义helloService并实现约定的接口
type HelloService struct {
pb.UnimplementedHelloServer
}
// SayHello 实现Hello服务接口
func (h HelloService) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {
resp := new(pb.HelloResponse)
resp.Message = fmt.Sprintf("Hello %s.", in.Name)
fmt.Println(in.Name)
return resp, nil
}
func main() {
listen, err := net.Listen("tcp", Address)
if err != nil {
grpclog.Fatalf("Failed to listen: %v", err)
}
// 实例化grpc Server
s := grpc.NewServer()
// 注册HelloService
pb.RegisterHelloServer(s, &HelloService{})
grpclog.Info("Listen on " + Address)
str := s.Serve(listen)
fmt.Println(str)
}
注意:根据自己工程包结构实现
文章来源:https://www.toymoban.com/news/detail-407796.html
6、客户端
package main
import (
pb "awesomeProject/proto/hello" // 引入proto包
"fmt"
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/grpclog"
)
const (
// Address gRPC服务地址
Address = "127.0.0.1:50052"
)
func main() {
// 连接
conn, err := grpc.Dial(Address, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
grpclog.Fatalln(err)
}
fmt.Println("连接成功")
defer conn.Close()
// 初始化客户端
c := pb.NewHelloClient(conn)
// 调用方法
req := &pb.HelloRequest{Name: "gRPC"}
res, err := c.SayHello(context.Background(), req)
if err != nil {
grpclog.Fatalln(err)
}
fmt.Println(res.Message)
grpclog.Info(res.Message)
}
7、结果展示
文章来源地址https://www.toymoban.com/news/detail-407796.html
到了这里,关于【gRPC】go语言实现gRPC(示例实践演示)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!