av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

從0到1:帶你完整寫一個GolangGrpc服務(wù)

# 1. 環(huán)境準備

第一步:安裝 protoc

為嵐皋等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及嵐皋網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站設(shè)計、嵐皋網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

前往 protobuf,下載最新版的 protoc ,我下載的是 win 64

第二步:安裝 protoc-gen-go

前往 protobuf-go ,同樣下載最新版的 protoc,同樣下載的是 win 64

將下載后的 protoc.exe 和 protoc-gen-go 放到 %GOPATH%\bin\ 目錄下。

或者更簡單的方法,直接執(zhí)行如下命令就可以安裝

  
 
 
 
  1. go install google.golang.org/grpc/cmd/protoc-gen-go-grpc 

第三步:下載 grpc

  
 
 
 
  1. # 安裝 grpc  
  2. go get -u google.golang.org/grpc 
  3.  
  4. # gRPC運行時接口編解碼支持庫 
  5. go get -u github.com/golang/protobuf/proto  

# 2. 項目目錄結(jié)構(gòu)

在 $GOPATH/src 下新建 iswbm.com 目錄及三個子目錄(client,server,proto),在終端上進入該目錄,執(zhí)行如下命令創(chuàng)建 go.mod

  
 
 
 
  1. mkdir $GOPATH/src/iswbm.com/{client,server,proto} 
  2. cd mkdir $GOPATH/src/iswbm.com/ 
  3.  
  4. # 設(shè)置環(huán)境變量,確保 GO111MODULE 是開啟的 
  5. go env -w GO111MODULE=auto 
  6.  
  7. # 初始化項目 
  8. go mod init 

# 3. 編寫 proto 文件

編寫 proto/simple.proto

  
 
 
 
  1. syntax = "proto3"; 
  2.  
  3. package proto; 
  4. option go_package ="/proto"; 
  5.  
  6. // 定義發(fā)送請求信息 
  7. message SimpleRequest{ 
  8.   // 參數(shù)類型 參數(shù)名稱 標識號 
  9.   string data = 1; 
  10.  
  11. // 定義響應(yīng)信息 
  12. message SimpleResponse{ 
  13.   int32 code = 1; 
  14.   string value = 2; 
  15.  
  16. // 定義我們的服務(wù)(可以定義多個服務(wù),每個服務(wù)可以定義多個接口) 
  17. service Simple{ 
  18.   rpc GetSimpleInfo(SimpleRequest) returns (SimpleResponse){}; 

在 iswbm.com 目錄下,執(zhí)行如下命令

  
 
 
 
  1. protoc --go_out=. ./proto/simple.proto 
  2. protoc --go-grpc_out=. ./proto/simple.proto 

完成后,會在當(dāng)前目錄下生成一個 simple 目錄,該目錄下有一個 simple.pb.go 和 simple_grpc.pb.go

# 4. 編寫 server.go

  
 
 
 
  1. package main 
  2.  
  3. import ( 
  4.     "context" 
  5.     pb "iswbm.com/proto" 
  6.     "google.golang.org/grpc" 
  7.     "log" 
  8.     "net" 
  9.  
  10. const ( 
  11.     Address string = ":8000" 
  12.     Network string = "tcp" 
  13.  
  14. // 定義我們的服務(wù) 
  15. type SimpleService struct{ 
  16.     pb.UnimplementedSimpleServer 
  17.  
  18. // 實現(xiàn) GetSimpleInfo 方法 
  19. func (s *SimpleService) GetSimpleInfo(ctx context.Context, req *pb.SimpleRequest) (*pb.SimpleResponse, error) { 
  20.     data := req.Data 
  21.     log.Println("get from client: ", data) 
  22.     resp := &pb.SimpleResponse{ 
  23.         Code:  8888, 
  24.         Value: "grpc", 
  25.     } 
  26.     return resp, nil 
  27.  
  28. func main() { 
  29.  
  30.     // 1.監(jiān)聽端口 
  31.     listener, err := net.Listen(Network, Address) 
  32.     if err != nil { 
  33.         log.Fatalf("net.listen err: %v", err) 
  34.     } 
  35.     log.Println(Address, " net listening...") 
  36.     // 2.實例化gRPC服務(wù)端 
  37.     grpcServer := grpc.NewServer() 
  38.  
  39.     // 3.注冊我們實現(xiàn)的服務(wù) SimpleService 
  40.     pb.RegisterSimpleServer(grpcServer, &SimpleService{}) 
  41.  
  42.     // 4.啟動gRPC服務(wù)端 
  43.     err = grpcServer.Serve(listener) 
  44.     if err != nil { 
  45.         log.Fatalf("grpc server err: %v",err) 
  46.     } 
  47.  

完成后,先安裝依賴包

  
 
 
 
  1. go install 

執(zhí)行如下命令運行服務(wù)端

  
 
 
 
  1. > go run server/server.go 
  2. 2021/07/28 18:31:42 :8000  net listening... 

# 5. 編寫 client.go

  
 
 
 
  1. package main 
  2.  
  3. import ( 
  4.     "context" 
  5.     "google.golang.org/grpc" 
  6.     "log" 
  7.     pb "iswbm.com/proto" 
  8.  
  9. const ( 
  10.     Address string = ":8000" 
  11.  
  12. func main() { 
  13.     // 1.創(chuàng)建于gRPC服務(wù)端的連接 
  14.     conn, err := grpc.Dial(Address, grpc.WithInsecure()) 
  15.     if err != nil { 
  16.         log.Fatalf("dial conn err: %v", err) 
  17.     } 
  18.     defer conn.Close() 
  19.  
  20.     // 2.創(chuàng)建grpc客戶端 
  21.     client := pb.NewSimpleClient(conn) 
  22.  
  23.     // 3.調(diào)用服務(wù)端提供的服務(wù) 
  24.     req := pb.SimpleRequest{ 
  25.         Data: "Hello,Server", 
  26.     } 
  27.     resp, err := client.GetSimpleInfo(context.Background(), &req) 
  28.     if err != nil { 
  29.         log.Fatalf("resp err: %v", err) 
  30.     } 
  31.     log.Printf("get from server,code: %v,value: %v", resp.Code, resp.Value) 
  32.  

執(zhí)行如下命令運行,立馬就能收到來自 server 返回的消息

  
 
 
 
  1. > go run client/client.go 
  2. 2021/07/28 18:54:35 get from server,code: 8888,value: grpc 

同時,在 server 端也會打印來自 client 端的消息

  
 
 
 
  1. > go run server/server.go 
  2. 2021/07/28 18:51:59 :8000  net listening... 
  3. 2021/07/28 18:54:35 get from client:  Hello,Server 

本文轉(zhuǎn)載自微信公眾號「Go編程時光」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Go編程時光公眾號。

 


網(wǎng)頁名稱:從0到1:帶你完整寫一個GolangGrpc服務(wù)
網(wǎng)頁網(wǎng)址:http://uogjgqi.cn/article/dpihicj.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流