目錄
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下載
?創(chuàng)建文件夾
sudo mkdir /usr/local/proto
unzip protoc-21.6-linux-x86_64.zip
配置環(huán)境變量
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
再執(zhí)行下面命令,然后重啟
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;
}
進入下面文件夾下:
?然后執(zhí)行
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并實現(xiàn)約定的接口
type HelloService struct {
pb.UnimplementedHelloServer
}
// SayHello 實現(xiàn)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)
}
注意:根據(jù)自己工程包結構實現(xiàn)
文章來源:http://www.zghlxwxcb.cn/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、結果展示
文章來源地址http://www.zghlxwxcb.cn/news/detail-407796.html
到了這里,關于【gRPC】go語言實現(xiàn)gRPC(示例實踐演示)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!