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
目錄結

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/281695.html
標籤:區塊鏈
