精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Golang 語言編寫 gRPC 實戰項目

開發 前端
本文我們介紹怎么使用 grpc 開發“分布式系統”。這里使用引號是因為分布式系統是一個大概念,本文我們先介紹使用 grpc 開發分布式系統中的 service。

 [[425759]]

1、介紹

在之前的幾篇文章中,我們介紹了 protobuf 和 grpc,本文我們介紹怎么使用 grpc 開發“分布式系統”。這里使用引號是因為分布式系統是一個大概念,本文我們先介紹使用 grpc 開發分布式系統中的 service。

grpc 是 google 開源的 rpc 框架,使用 grpc 可以方便開發 rpc service;protobuf 是一種接口設計語言(IDL),grpc 框架使用的 IDL 是 protobuf。如果有讀者朋友還不了解 protobuf 和 grpc,建議先翻閱之前的幾篇文章。

本文是介紹使用 grpc 開發一個實戰項目 - ToDoList,目標是幫助讀者朋友們熟悉項目開發流程,該實戰項目包含 server service 和 client service。server 主要負責數據操作,client 主要負責業務邏輯處理。

2、server

首先,我們創建 proto 目錄,并創建 proto 文件,編寫 protobuf,設計項目的 service,接著創建 pb 目錄,使用 protoc 編譯我們編寫好的 proto 文件,生成 pb 文件。然后,我們創建 service 目錄,編寫生成的 pb 文件中接口定義的方法。最后,我們創建 grpc 服務器。

server 目錄

  1. ├── dao 
  2. │   ├── mysql.go 
  3. │   └── toDoList.go 
  4. ├── main.go 
  5. ├── pb 
  6. │   ├── todoPb 
  7. │   │   ├── toDoList.pb.go 
  8. │   │   └── toDoList_grpc.pb.go 
  9. │   └── userPb 
  10. │       ├── user.pb.go 
  11. │       └── user_grpc.pb.go 
  12. ├── proto 
  13. │   ├── toDoList.proto 
  14. │   └── user.proto 
  15. └── service 
  16.     └── toDoList.go 

編寫 proto 文件

讀者朋友們如果還不熟悉 protobuf,建議翻閱之前介紹 protobuf 的文章,限于篇幅,本文不再贅述。示例代碼如下:

  1. syntax = "proto3"
  2.  
  3. option go_package = "./todoPb"
  4.  
  5. service ToDoList { 
  6.   rpc CreateToDoList (ToDoListDetail) returns (CreateToDoListResult) {} 
  7.   rpc ReadToDoList (ToDoListPage) returns (ReadToDoListByPage) {} 
  8.  
  9. message ToDoListDetail { 
  10.   // @inject_tag: form:"id" xorm:"'id' not null pk autoincr" 
  11.   int64 id = 1
  12.  
  13. ... 

完整代碼,請查閱 github。

生成 pb 文件

接著,我們使用 protoc 編譯 proto 文件,生成 pb 文件,關于怎么使用 protoc 編譯 proto 文件,在之前的文章已經詳細介紹,限于篇幅,本文不再贅述,編譯命令如下:

  1. protoc --go_out=./pb --go-grpc_out=./pb proto/* && protoc-go-inject-tag -XXX_skip=xorm -input=./pb/todoPb/toDoList.pb.go 

執行以上命令,將在 pb 目錄中自動生成 pb 文件。

編寫接口定義的方法

至此,我們開始編寫 golang 代碼,在 service 目錄中創建 go 文件,實現生成的 pb 文件中接口定義的方法。

  1. ... 
  2.  
  3. type ToDoList struct { 
  4.  pb.UnimplementedToDoListServer 
  5.  
  6. func (t *ToDoList) CreateToDoList(ctx context.Context, in *pb.ToDoListDetail) (*pb.CreateToDoListResult, error) { 
  7.  log.Printf("id: %d content:%v datetime:%d\n", in.GetId(), in.GetContent(), in.GetDatetime()) 
  8.  record, err := dao.Add(ctx, in) 
  9.  data := &pb.CreateToDoListResult{Record: record} 
  10.  return data, err 
  11.  
  12. ... 

閱讀上面這段代碼,可以發現我們把數據庫操作相關代碼設計在 dao 包中。service 中通過調用 dao 包的方法操作數據庫,另外,其他數據操作組件也可以在 service 中調用。

完整代碼,請查閱 github。

創建 gRPC 服務器

在完成 service 代碼編寫之后,我們創建 grpc server,然后注冊服務。

  1. ... 
  2.  
  3. server := grpc.NewServer() 
  4.  pb.RegisterToDoListServer(server, new(service.ToDoList)) 
  5.  
  6. ... 

完整代碼,請查閱 github。

以上就是使用 grpc 創建 rpc service 的一般流程,在生產環境項目中,還需要完善一些公共方法,比如配置文件讀取、錯誤碼定義、參數驗證等。為了讀者朋友們容易理解,該實戰項目中未涉及這部分內容,感興趣的讀者朋友們可以嘗試自己實現該部分內容。

3、client

client 主要負責業務邏輯,本文介紹的實戰項目使用 gin 框架實現路由。通常,client service 的 pb 文件拷貝 server service 生成的 pb 文件。

首先,我們創建 controller 目錄,調用 server service 的方法,然后,使用 gin 框架設計路由。

client 目錄

  1. ├── controller 
  2. │   └── toDoList.go 
  3. ├── main.go 
  4. ├── pb 
  5. │   ├── todoPb 
  6. │   │   ├── toDoList.pb.go 
  7. │   │   └── toDoList_grpc.pb.go 
  8. │   └── userPb 
  9. │       ├── user.pb.go 
  10. │       └── user_grpc.pb.go 
  11. └── router 
  12.     └── router.go 

拷貝 server service 生成的 pb 文件

client 直接拷貝 server service 生成的 pb 文件,不需要編寫 proto 文件,然后使用 protoc 編譯 proto 文件,生成 pb 文件。

編寫 controller 代碼,調用 server service 的方法

在 controller 目錄中創建 go 文件,編寫 controller 方法,并創建客戶端,使用創建的客戶端調用 server service 的方法。

  1. func CreateToDoList(ctx *gin.Context) { 
  2.  
  3. ... 
  4.  
  5. cc := NewToDoListClient() 
  6.  defer func() { 
  7.   err := cc.Close() 
  8.   if err != nil { 
  9.    log.Fatalf("conn close error=%v", err) 
  10.   } 
  11.  }() 
  12.  cli := pb.NewToDoListClient(cc) 
  13.  ctx1, cancel := context.WithTimeout(context.Background(), time.Second) 
  14.  defer cancel() 
  15.  res, err := cli.CreateToDoList(ctx1, param) 
  16.    
  17. ... 

完整代碼,請查閱 github。

創建 gin 路由

編寫完 controller 之后,創建 router 目錄,在 router 目錄中創建 gin 路由,用于訪問 controller 中的方法。

  1. ... 
  2.  
  3. r := gin.Default() 
  4.  apiV1 := r.Group("/v1"
  5.  todolist := apiV1.Group("/todolist"
  6.  { 
  7.   todolist.POST("/add", controller.CreateToDoList) 
  8.  
  9. ... 

完整代碼,請查閱 github。

4、總結

本文我們介紹了怎么使用 grpc 開發 service。讀者朋友們閱讀完本文,可以了解使用 grpc 開發 service 的一般開發流程,建議感興趣的讀者朋友們,實現項目中 user service 的代碼編寫。

 

責任編輯:張燕妮 來源: Golang語言開發棧
相關推薦

2021-09-13 05:02:49

GogRPC語言

2021-09-01 23:29:37

Golang語言gRPC

2021-10-10 23:02:49

Golang語言代碼

2022-02-20 23:15:46

gRPCGolang語言

2025-01-13 06:00:00

Go語言gRPC

2023-03-01 08:33:37

gRPC健康檢查代碼

2022-04-29 11:52:02

API代碼HTTP

2024-09-04 08:09:51

2021-06-09 23:36:46

Golang語言版本

2025-09-03 00:06:05

2021-05-28 08:58:41

Golang網卡metrics

2021-10-26 09:26:21

編程技能開發

2018-08-01 15:10:02

GolangPython語言

2021-06-29 23:40:19

Golang語言并發

2021-12-13 01:24:14

語言Golang panic

2021-12-05 23:14:24

微服務GolanggRPC

2020-11-01 17:13:22

DotNET 5語言gRPC

2023-09-06 07:17:57

2010-01-13 13:13:26

C++項目

2021-11-08 23:09:07

Go排序數據
點贊
收藏

51CTO技術棧公眾號

亚洲图片欧美日产| 精品电影在线观看| 欧美日韩一区二区欧美激情| 欧美精品一区三区在线观看| 免费看一级黄色| 欧美成人三级| 一区二区三区色| 精品在线不卡| 国产又大又长又粗| 亚洲毛片播放| 伊人精品在线观看| 国产在线观看免费播放| 欧美黄色三级| 亚洲国产精品久久人人爱| 日韩av电影免费观看| www.亚洲欧美| 日韩欧美一区免费| 日韩精品专区在线| 亚洲 中文字幕 日韩 无码| 69xxx在线| 久久精品一区二区三区av | 中文不卡1区2区3区| 中文字幕色av一区二区三区| 久久综合中文色婷婷| 国产成a人亚洲精v品无码 | 26uuu国产精品视频| 少妇高潮一区二区三区喷水| 琪琪久久久久日韩精品| 日韩欧美在线网站| 一区二区三区 欧美| 国产美女精品写真福利视频| 亚洲欧美日本在线| 亚洲一区在线直播| 国产乱视频在线观看| 成人精品视频一区二区三区| 91在线视频导航| 人人妻人人爽人人澡人人精品| 日韩欧美在线精品| 欧美哺乳videos| 免费看日本黄色| 婷婷视频在线| 国产精品无遮挡| 日本免费高清不卡| 天堂av电影在线观看| 成人美女在线视频| aaa级精品久久久国产片| 国产又粗又猛视频| 麻豆精品一区二区av白丝在线| 日本sm极度另类视频| 1级黄色大片儿| 亚洲激情亚洲| 69影院欧美专区视频| 五月天婷婷丁香| 日韩香蕉视频| 91国内产香蕉| 日本一级黄色录像| 99视频在线精品国自产拍免费观看| 九九久久久久久久久激情| 麻豆天美蜜桃91| 中文字幕一区二区三三| 日韩视频永久免费观看| 麻豆精品国产传媒| √天堂8资源中文在线| 成人免费av在线| 国产一区精品视频| 日本中文字幕在线观看视频| 羞羞答答国产精品www一本| 4388成人网| 久久久久久久久久成人| 日本成人超碰在线观看| 国产精品三级在线| 国产精品无码免费播放| 国产精品一区久久久久| 国产精品欧美久久| 可以在线观看的黄色| 国产精品污污网站在线观看| 中文字幕一区二区三区四区五区| a毛片在线播放| 亚洲高清中文字幕| 苍井空浴缸大战猛男120分钟| 国产v综合v| 欧美日韩国产精品自在自线| 国产在线视频三区| 欧美日韩另类图片| 中文字幕精品久久久久| 日韩成人毛片视频| 亚洲精品在线二区| 国产精品www| 99久久久无码国产精品免费| av资源站一区| 亚洲欧洲日韩精品| 国产乱妇乱子在线播视频播放网站| 黄色成人在线免费| 少妇一级淫免费放| 波多野结衣欧美| 777a∨成人精品桃花网| av影片在线播放| 国产一区二区在线| 欧美国产日韩一区二区三区| 五月天婷婷久久| 精品亚洲成a人| 久久久久免费网| 成码无人av片在线观看网站| 欧美日韩加勒比精品一区| 亚洲这里只有精品| 久久精品国产亚洲5555| 视频在线观看99| 国产成人一区二区三区影院在线 | 国产精品自拍视频在线| 日韩a在线看| 国产精品狼人久久影院观看方式| 欧美黑人在线观看| 国产一区高清| 亚洲精品之草原avav久久| 久久成人小视频| 久久婷婷丁香| 国产欧美一区二区视频| 黄a在线观看| 色狠狠av一区二区三区| 一级黄色免费视频| 亚洲成av人片一区二区密柚| 国产精品成人v| 凸凹人妻人人澡人人添| 亚洲欧美日韩国产一区二区三区 | 国产婷婷97碰碰久久人人蜜臀| 天天天天天天天天操| 视频一区视频二区在线观看| 国产亚洲欧美另类一区二区三区| 黄网页在线观看| 欧美性做爰猛烈叫床潮| 国产艳俗歌舞表演hd| 亚洲精品高潮| 日韩精品最新网址| 亚洲欧美卡通动漫| 久久精品伊人| 久久偷窥视频| 波多野结衣乳巨码无在线观看| 在线不卡中文字幕| 青青操在线播放| 日韩成人免费电影| 日韩av在线电影观看| 日本三级一区| 日韩av影片在线观看| 欧美黑人欧美精品刺激| 欧美三级第一页| 亚洲自拍欧美另类| 老司机午夜在线| 正在播放亚洲一区| 99自拍视频在线| 狠狠色综合色综合网络| 亚洲AV无码成人精品一区| 欧美美女福利视频| 精品国产欧美一区二区三区成人 | 手机在线免费看片| 韩国视频一区二区| 亚洲一区 在线播放| 精品一区二区三区在线观看视频| 久久深夜福利免费观看| 国产精品一区二区黑人巨大| 亚洲美女视频一区| www.美色吧.com| 国产日韩亚洲欧美精品| 日本一区二区三区视频在线观看| 最新欧美电影| 日韩在线观看精品| 亚洲高清视频在线播放| 亚洲成av人片在线| 波多野吉衣中文字幕| 加勒比久久综合| 国产高清视频一区三区| av资源在线观看免费高清| 欧美精品在线一区二区| 欧美片一区二区| 99re热这里只有精品免费视频| 浮妇高潮喷白浆视频| 精品视频免费| 95av在线视频| 最新欧美色图| www.亚洲成人| 天堂中文网在线| 久久午夜鲁丝片午夜精品| 日韩精品乱码av一区二区| 亚洲黄色成人久久久| 日韩中文字幕无砖| 欧美性在线观看| 色综合久久影院| 欧美成人r级一区二区三区| 综合激情网五月| 综合在线观看色| 丰满大乳奶做爰ⅹxx视频| 日本成人超碰在线观看| 精品少妇人欧美激情在线观看| 亚洲欧洲美洲国产香蕉| 91久久国产精品| 日韩激情电影免费看| 日韩一区二区欧美| 天堂中文字幕在线| 91精品午夜视频| 99久久久久久久久| 亚洲一区二区三区视频在线| 最近中文字幕免费| 国产精品资源网| 欧美性猛交久久久乱大交小说 | 91精品国产乱码久久久久| 亚洲成人综合网站| 久久久精品少妇| 久久亚洲捆绑美女| 中文字幕1区2区| 蜜桃视频一区二区| 欧美日韩综合另类| 日韩欧美久久| 国产精品嫩草影院一区二区| 国产91足控脚交在线观看| 综合久久五月天| 四虎影视2018在线播放alocalhost| 欧美精品777| 国产一级片免费视频| 亚洲成av人综合在线观看| 久久99久久99精品免费看小说| 久久综合资源网| 野战少妇38p| 国产乱人伦偷精品视频免下载| 亚洲乱码国产一区三区| 亚洲精品色图| 青草视频在线观看视频| 中文字幕一区二区三区欧美日韩| 亚洲v国产v| 你懂的一区二区三区| 久久99精品久久久久久青青日本 | 精品综合久久| 爱爱精品视频| 91系列在线观看| 青青在线精品| 精品少妇一区二区30p| 欧美极品视频| 色婷婷综合久久久久中文字幕1| 黄色毛片在线看| 亚洲精品日韩欧美| 天天干天天插天天操| 精品国产一区二区三区久久久蜜月| 91成人国产综合久久精品| 欧美午夜不卡在线观看免费| 中文字幕在线播| 91国产免费观看| 中文字幕 国产精品| 都市激情亚洲色图| 亚洲另类欧美日韩| 激情久久av一区av二区av三区| 久久久久久久伊人| 亚洲a一区二区| 国产成人无码一区二区三区在线 | 日韩一区二区福利| 麻豆最新免费在线视频| 色婷婷综合成人av| av网站在线看| 欧美高跟鞋交xxxxxhd| 国产丝袜精品丝袜| 91sa在线看| 神马久久资源| 国产精品综合不卡av| 伊人久久大香线蕉综合影院首页| 久久久999国产| 成人在线免费看片| 欧美激情第99页| 黄色漫画在线免费看| 奇门遁甲1982国语版免费观看高清| 成人免费看视频网站| 国产成人激情小视频| 精品自拍视频| 99精品欧美一区二区三区| 麻豆一区二区| 日本午夜精品一区二区| 97精品视频| 日韩精品免费一区| 免费在线亚洲欧美| 一道本视频在线观看| 国产制服丝袜一区| 国产美女视频免费观看下载软件| 久久久午夜精品| 国产精品国产精品88| 午夜视频在线观看一区二区| 男人天堂2024| 91麻豆精品91久久久久同性| 手机看片国产1024| 中文国产成人精品| 欧美性video| 日韩免费高清在线观看| 国产亚洲高清一区| 久久综合九色综合久99| 亚洲成av人片一区二区密柚| 99精品在线免费视频| 久久国产免费看| 91黄色免费视频| 亚洲欧美在线视频观看| 久久夜色精品亚洲| 这里只有精品99re| 五月婷婷狠狠干| 久久久国产精品免费| 久久男人天堂| 亚洲va码欧洲m码| 国产亚洲欧美日韩在线观看一区二区 | 欧美视频一区二区三区…| 国产又爽又黄免费软件| 日韩精品黄色网| www久久日com| 国产精品美女午夜av| 久草在线综合| 国风产精品一区二区| 青青草伊人久久| 中文字幕精品久久久| 亚洲免费在线电影| 国产精品51麻豆cm传媒| 亚洲国产第一页| 亚洲精品成人电影| 色悠悠久久88| 性欧美videohd高精| 国产精品久久久久久免费观看| 欧美freesextv| 亚洲精品一二三四五区| 亚洲综合社区| 911亚洲精选| 亚洲欧美激情在线| 中文字幕在线观看国产| 欧美人体做爰大胆视频| 你懂的免费在线观看视频网站| 九九精品视频在线| 中文成人在线| 亚洲国产一区二区三区在线播| 久久久蜜桃一区二区人| 波多野结衣加勒比| 亚洲一区av在线| 成人高潮片免费视频| 久久高清视频免费| 99er精品视频| 在线综合视频网站| 久久精品av麻豆的观看方式| 男人舔女人下部高潮全视频| 欧美日韩亚洲一区二区三区| 日本人妻丰满熟妇久久久久久| 日韩av中文字幕在线免费观看| 亚洲小说区图片区都市| 性欧美长视频免费观看不卡| 日韩一区二区三区色| 黄色网zhan| av成人毛片| 国产高清成人久久| 亚洲妇女屁股眼交7| 黄色福利在线观看| 97国产精品久久| 亚洲盗摄视频| 日韩有码免费视频| 国产女主播一区| 亚洲在线观看av| 久热国产精品视频| 日韩视频一二区| 国产一线二线三线女| 99国产精品国产精品毛片| 特一级黄色大片| 亚洲欧洲高清在线| 成人免费网站www网站高清| 色阁综合av| 国产美女视频91| 国产精品日日夜夜| 亚洲天堂av在线免费观看| 91国拍精品国产粉嫩亚洲一区| 亚洲欧美电影在线观看| 狠狠色丁香久久婷婷综合丁香| 欧产日产国产v| 亚洲成人精品视频在线观看| 在线天堂资源www在线污| 日本高清久久一区二区三区| 麻豆精品在线视频| 欧美成人精品欧美一级| 亚洲高清久久久久久| 欧美特黄aaaaaaaa大片| 亚洲一区二区在线看| 高潮精品一区videoshd| 久久99精品波多结衣一区| 中文字幕一区日韩电影| 亚洲亚洲一区二区三区| 116极品美女午夜一级| 国产精品美女一区二区在线观看| 精品国自产在线观看| 97avcom| 亚洲xxx拳头交| 三级男人添奶爽爽爽视频| 欧美三级电影在线观看| 欧美性受ⅹ╳╳╳黑人a性爽| 秋霞久久久久久一区二区| 国产一区二区看久久| 欧美性猛交bbbbb精品| 久久视频在线播放| 一区二区美女| 两性午夜免费视频| 国产精品久久久一本精品| 亚洲黄色一级大片| 国产精品欧美一区二区| 在线欧美三区| 三级黄色在线观看| 精品一区电影国产|