国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Golang 語言 gRPC 怎么使用?

開發(fā) 后端
既然我們要介紹 gRPC 怎么在 Golang 語言中使用,那么我們必須搭建 Golang 開發(fā)環(huán)境。這部分內(nèi)容比較簡(jiǎn)單,本文就不再贅述了,如果有讀者朋友對(duì)這塊內(nèi)容不清楚,建議閱讀 Golang 官網(wǎng)文檔。

[[423367]]

01介紹

在之前的兩篇文章中,我們已經(jīng)介紹了使用 gRPC 創(chuàng)建 RPC 應(yīng)用的前導(dǎo)知識(shí)。我們了解到 gRPC 支持多語言,本文我們介紹在 Golang 語言中怎么使用 gRPC。

02準(zhǔn)備工作

既然我們要介紹 gRPC 怎么在 Golang 語言中使用,那么我們必須搭建 Golang 開發(fā)環(huán)境。這部分內(nèi)容比較簡(jiǎn)單,本文就不再贅述了,如果有讀者朋友對(duì)這塊內(nèi)容不清楚,建議閱讀 Golang 官網(wǎng)文檔。

此外,我們還需要安裝接口設(shè)計(jì)語言 Protocol buffer 的編譯器 protoc,我們?cè)谥暗奈恼隆窹rotobuf - 更小、更快、更簡(jiǎn)單的交互式數(shù)據(jù)語言」中也已經(jīng)介紹過 protoc 的安裝方法,本文就不再贅述了,如果有需要了解的讀者朋友,可以翻閱一下這篇文章。

最后,我們介紹一下 protoc 編譯生成 pb 文件需要使用的插件 protoc-gen-go 和 protoc-gen-go-grpc。插件安裝方式,具體如下:

執(zhí)行 go install 命令安裝插件

  1. go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26 
  2.  go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1 

修改 PATH

  1. $ export PATH="$PATH:$(go env GOPATH)/bin" 

完成以上兩步之后,我們就可以使用 protoc 編譯 .proto 文件,生成 pb 文件了。

03編寫 .proto 文件和生成 pb 文件

在 Golang 語言中使用 gRPC,首先編寫 .proto 文件,然后使用 protoc 編譯 .proto 文件生成 pb 文件,最后編寫剩余的 Golang 代碼。

接口設(shè)計(jì)語言 protobuf,在之前的文章 「Golang 語言 gRPC 使用的接口設(shè)計(jì)語言 protobuf」 中也已經(jīng)介紹過了,本文不再贅述,如果有需要了解的讀者朋友,可以翻閱一下這篇文章。

示例代碼:

編寫 .proto 文件。

  1. syntax = "proto3"
  2.  
  3. option go_package = "advanced_go/lesson06/proto/greeter"
  4.  
  5. service Greeter { 
  6.   rpc SayHello (HelloRequest) returns (HelloReply) {} 
  7.  
  8. message HelloRequest { 
  9.   string name = 1; 
  10.  
  11. message HelloReply { 
  12.   string message = 1; 

使用 protoc 編譯 .proto 文件,生成 pb 文件。

  1. $ protoc --go_out=. --go_opt=paths=source_relative \ 
  2. --go-grpc_out=. --go-grpc_opt=paths=source_relative \ 
  3. proto/helloworld.proto 

04編寫服務(wù)端和客戶端 Golang 代碼

我們?cè)谥暗奈恼轮薪榻B過 gRPC 是什么,接下來,我們通過示例代碼介紹在 Golang 語言中怎么使用 gRPC,本文先來介紹使用 gRPC 的編碼流程,限于篇幅,關(guān)于 gRPC 的更多使用方法,后續(xù)會(huì)新開篇文章介紹。

首先使用接口設(shè)計(jì)語言 protobuf 的編譯器 protoc、protoc-gen-go 和 protoc-gen-go-grpc 插件生成 pb 文件,我們通過查看生成的 pb 文件,可以看到 protoc 為我們自動(dòng)生成結(jié)構(gòu)體、接口和方法等 Golang 代碼。

接下來,我們只需把剩余的 Golang 代碼寫完就可以了,具體實(shí)現(xiàn)如下:

服務(wù)端示例代碼:

  1. const ( 
  2.  port = ":50051" 
  3.  
  4. type server struct { 
  5.  pb.UnimplementedGreeterServer 
  6.  
  7. func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { 
  8.  log.Printf("Received: %v"in.GetName()) 
  9.  return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil 
  10.  
  11. func main () { 
  12.  lis, err := net.Listen("tcp", port) 
  13.  if err != nil { 
  14.   log.Fatalf("failed to listen: %v", err) 
  15.  } 
  16.  s := grpc.NewServer() 
  17.  pb.RegisterGreeterServer(s, &server{}) 
  18.  log.Printf("server listening at %v", lis.Addr()) 
  19.  if err := s.Serve(lis); err != nil { 
  20.   log.Fatalf("failed to serve: %v", err) 
  21.  } 

閱讀上面這段代碼,我們使用 Golang 語言編寫了 SayHello 方法,該方法實(shí)際上就是 pb 文件中自動(dòng)生成的 SayHello 方法的具體實(shí)現(xiàn),對(duì)應(yīng)自動(dòng)生成的 pb 文件 helloworld_grpc.pb.go 中的代碼如下:

  1. // UnimplementedGreeterServer must be embedded to have forward compatible implementations. 
  2. type UnimplementedGreeterServer struct { 
  3.  
  4. func (UnimplementedGreeterServer) SayHello(context.Context, *HelloRequest) (*HelloReply, error) { 
  5.  return nil, status.Errorf(codes.Unimplemented, "method SayHello not implemented"

在 main 函數(shù)中,我們使用 grpc 調(diào)用 NewServer 函數(shù)創(chuàng)建一個(gè)服務(wù),然后使用 pb 文件中的 RegisterGreeterServer 函數(shù)注冊(cè)服務(wù),對(duì)應(yīng)自動(dòng)生成的 pb 文件 helloworld_grpc.pb.go 中的代碼如下:

  1. func RegisterGreeterServer(s grpc.ServiceRegistrar, srv GreeterServer) { 
  2.  s.RegisterService(&Greeter_ServiceDesc, srv) 

客戶端示例代碼:

  1. const( 
  2.  address = ":50051" 
  3.  defaultName = "word" 
  4.  
  5. func main () { 
  6.  conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock()) 
  7.  if err != nil { 
  8.   log.Fatalf("did not connect: %v", err) 
  9.  } 
  10.  defer conn.Close() 
  11.  c := pb.NewGreeterClient(conn) 
  12.  
  13.  name := defaultName 
  14.  if len(os.Args) > 1 { 
  15.   name = os.Args[1] 
  16.  } 
  17.  ctx, cancel := context.WithTimeout(context.Background(), time.Second
  18.  defer cancel() 
  19.  r, err := c.SayHello(ctx, &pb.HelloRequest{Namename}) 
  20.  if err != nil { 
  21.   log.Fatalf("could not greet: %v", err) 
  22.  } 
  23.  log.Printf("Greeting: %s", r.GetMessage()) 

閱讀上面這段代碼,我們使用 pb 文件中的 NewGreeterClient 方法創(chuàng)建一個(gè)客戶端,然后就可以使用創(chuàng)建的客戶端直接調(diào)用服務(wù)端的 SayHello 方法,對(duì)應(yīng)自動(dòng)生成的 pb 文件 helloworld_grpc.pb.go 中的代碼如下:

  1. type GreeterClient interface { 
  2.  SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error) 
  3.  
  4. type greeterClient struct { 
  5.  cc grpc.ClientConnInterface 
  6.  
  7. func NewGreeterClient(cc grpc.ClientConnInterface) GreeterClient { 
  8.  return &greeterClient{cc} 
  9.  
  10. func (c *greeterClient) SayHello(ctx context.Context, in *HelloRequest, opts ...grpc.CallOption) (*HelloReply, error) { 
  11.  out := new(HelloReply) 
  12.  err := c.cc.Invoke(ctx, "/Greeter/SayHello"inout, opts...) 
  13.  if err != nil { 
  14.   return nil, err 
  15.  } 
  16.  return out, nil 

編寫完服務(wù)端和客戶端代碼,接下來,我們分別啟動(dòng)服務(wù)端和客戶端,執(zhí)行結(jié)果如下:

  1. go run grpc_server/main.go  
  2. 2021/09/11 23:02:59 server listening at [::]:50051 
  3. 2021/09/11 23:03:23 Received: word 
  4. 2021/09/11 23:03:31 Received: frank 
  5.  
  6. go run grpc_client/main.go  
  7. 2021/09/11 23:03:23 Greeting: Hello word 
  8.  
  9. go run grpc_client/main.go frank 
  10. 2021/09/11 23:03:31 Greeting: Hello frank 

05總結(jié)

本文我們介紹在 Golang 語言中怎么使用 gRPC,為了方便讀者朋友們理解,文章通過一個(gè)簡(jiǎn)單示例從零到一的實(shí)現(xiàn),介紹了在 Golang 語言中使用 gRPC 的編碼流程。

建議讀者朋友們閱讀完本文,動(dòng)手敲一遍示例代碼,來進(jìn)一步加深理解。限于篇幅,關(guān)于 gRPC 的更多使用方法,我們后續(xù)撰文介紹。

編碼流程歸納如下:

 

  1. 搭建 Golang 開發(fā)環(huán)境。
  2. 安裝 protobuf 編譯器 protoc 和插件 protoc-gen-go、protoc-gen-go-grpc,設(shè)置環(huán)境變量。
  3. 初始化項(xiàng)目 go mod init。
  4. 編寫 protobuf,生成 pb 文件,執(zhí)行 go mod tidy 整理依賴包。
  5. 編寫剩余 Golang 代碼。

 

責(zé)任編輯:武曉燕 來源: Golang語言開發(fā)棧
相關(guān)推薦

2021-09-26 10:20:06

開發(fā)Golang代碼

2022-02-20 23:15:46

gRPCGolang語言

2021-09-01 23:29:37

Golang語言gRPC

2021-06-07 23:19:44

Golang語言 Defer

2025-01-13 06:00:00

Go語言gRPC

2021-07-12 05:05:59

Golang語言字段

2021-01-29 08:56:13

Golang標(biāo)準(zhǔn)庫(kù)函數(shù)

2021-06-09 23:36:46

Golang語言版本

2021-10-10 23:02:49

Golang語言代碼

2021-06-29 23:40:19

Golang語言并發(fā)

2021-12-13 01:24:14

語言Golang panic

2021-11-08 23:09:07

Go排序數(shù)據(jù)

2021-04-28 09:02:48

Golang語言Context

2021-12-05 23:14:24

微服務(wù)GolanggRPC

2021-07-26 11:19:43

微服務(wù)開發(fā)技術(shù)

2021-10-31 23:01:50

語言拼接字符串

2025-02-04 13:53:18

NixGogRPC

2021-11-28 23:06:30

語言編程接口

2022-01-04 23:13:57

語言PanicGolang

2022-04-29 11:52:02

API代碼HTTP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产综合色香蕉精品| 色av一区二区三区| 香蕉视频官网在线观看日本一区二区| 色视频www在线播放国产成人| 天使と恶魔の榨精在线播放| 精品免费在线观看| 国产黄视频在线观看| 国产精品网站导航| 国产wwwxx| 国产视频亚洲色图| 最近免费中文字幕中文高清百度| 国产福利91精品| 国产一级片91| 国产一区二区在线看| 小说区视频区图片区| 久久国产生活片100| 亚洲国产精品毛片| 老妇喷水一区二区三区| 欧美专区一二三| 玖玖在线精品| 亚洲欧美日韩精品综合在线观看| 天堂资源在线中文精品| 亚洲乱码一区二区三区 | 亚洲欧美日韩中文在线制服| 欧美人与禽猛交乱配| 日韩欧美激情一区| 黄视频网站在线观看| 亚洲国产天堂久久国产91| 蜜桃视频www网站在线观看| 亚洲人成伊人成综合网久久久| av综合电影网站| 中文字幕日本精品| a级日韩大片| 国产不卡视频在线| 欧美88av| 亚洲欧洲国产精品久久| 成人综合婷婷国产精品久久| 久久婷婷五月综合色国产香蕉| 日本一区二区三区国色天香| 爆操欧美孕妇| 欧美性大战xxxxx久久久| 女囚岛在线观看| 夜夜嗨av一区二区三区免费区| 欧美高清xxx| 国产精品日韩在线| 国产精品日本| 成人羞羞国产免费网站| 亚洲国产视频直播| 性国产高清在线观看| 中文字幕在线国产精品| 日韩啪啪网站| 久久亚洲精品欧美| 久久综合色一综合色88| 三级网站在线| 欧美大肚乱孕交hd孕妇| 四虎国产精品免费久久| 国产精品久久77777| 免费一区视频| 亚洲黄色av网址| 欧美顶级少妇做爰| 日韩激情精品| 国产一区二区三区四区hd| 国产99久久久国产精品| 在线观看成年人视频| 精品国产成人系列| 婷婷综合福利| 亚洲欧洲一区二区| 一区二区三区免费看视频| 欧美videos另类精品| 欧美在线性视频| 国产一区二区美女诱惑| 一本到av在线| 丝袜亚洲另类欧美重口| 欧美日韩在线大尺度| 男人天堂网视频| 日韩一区二区中文字幕| 欧美日韩一本| 色撸撸在线观看| 欧美午夜性色大片在线观看| 国产精品亚洲d| 99视频免费观看蜜桃视频| 久久综合色婷婷| 97影院秋霞午夜在线观看| 2025国产精品视频| 精品在线视频一区| 日本福利片高清在线观看| 一区二区在线视频| 亚洲综合另类| 美女露隐私免费网站| 日韩在线精品视频| 精品国产一区二区三区久久久樱花| 400部精品国偷自产在线观看| 欧美性xxxx极品hd欧美风情| 精品国产亚洲一区二区三区| 日韩国产欧美一区| 狠狠躁夜夜躁人人爽超碰91| 91久久精品无嫩草影院| 国产卡一卡二在线| 91精品国产综合久久国产大片| 国产探花一区| 孩娇小videos精品| 久久精品国产91精品亚洲| 免费成人av在线| 日本在线视频网| 91在线观看免费网站| 亚洲欧美另类综合偷拍| 日韩毛片网站| 色哺乳xxxxhd奶水米仓惠香| 91精品国产91久久综合桃花| 中文字幕一区二区三区在线视频| 黑人巨大精品欧美一区二区奶水| 色综合久综合久久综合久鬼88 | 综合网在线视频| 老司机亚洲精品一区二区| 制服诱惑一区| 日韩欧美国产精品一区| 欧美性久久久| 少妇性bbb搡bbb爽爽爽欧美| 国产成人福利视频| 亚洲男同性视频| 日本三级久久| 国产女主播在线| 午夜精品一区二区三区在线| 菠萝蜜视频在线观看一区| 天堂资源在线| 永久久久久久| 日韩av资源在线播放| 热久久久久久久| 日本伦理一区二区| 亚洲免费在线精品一区| 精品国产伦一区二区三区观看方式 | 欧美在线色视频| 欧美一区二区三区久久精品| 伊人精彩视频| 国产一区私人高清影院| 亚洲.国产.中文慕字在线| 国产一区二区精品久| 国精产品999国精产品官网| 国产精品福利片| 欧美性生交大片免费| 欧美激情第8页| 高h视频在线观看| 中文字幕日韩一区二区三区| 亚洲视频axxx| 日本一区二区三级电影在线观看 | 免费人成短视频在线观看网站| 国产精品男人爽免费视频1| 亚洲国产精品久久久男人的天堂| 区一区二视频| 东热在线免费视频| 色吧亚洲视频| 在线播放亚洲激情| 中文字幕在线不卡| 一本一道久久a久久精品蜜桃| 日本韩国在线视频爽| 亚洲欧美99| 欧美xxxx14xxxxx性爽| 中文字幕中文在线不卡住| 国产精品久久久久无码av| 日本视频不卡| 中文字幕人妻熟女人妻洋洋| 精品中文字幕乱| 一区二区三区高清| 亚洲特级毛片| 成人日韩精品| bt电影在线| 久久久精品国产一区二区三区| 精品无人区太爽高潮在线播放| 久久只精品国产| 久久久久久久久国产一区| 2024短剧网剧在线观看| 日本精品一区在线观看| 国产中文字幕91| 亚洲精品国产精品国自产在线 | 日韩av高清在线看片| 国产精品扒开腿做爽爽爽男男| 欧美精品久久99| 久久这里只精品最新地址| 久久久久国产| 制服诱惑亚洲| 午夜cr在线观看高清在线视频完整版| 亚洲国产精品综合| 26uuu日韩精品一区二区| 91精品福利在线一区二区三区| 久久久久久久久岛国免费| 一级欧洲+日本+国产| 日本欧美日韩| 蜜桃传媒在线| 日本a在线免费观看| 91在线视频导航| 国产亚洲人成网站在线观看| 亚洲永久免费视频| 国产乱码精品1区2区3区| 超碰成人久久| 久久99久久久精品欧美| av黄色在线观看| 爆操妹子视频在线观看| 一级黄色片播放| av成人观看| 青青青国产精品一区二区|