精品欧美一区二区三区在线观看 _久久久久国色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 | 欧美男gay| 欧美精品丝袜中出| 妞干网在线视频观看| www日韩tube| 国产v综合v亚洲欧| 国产精品久久二区| 久久精品视频9| 日韩精品dvd| 亚洲电影成人av99爱色| jizz18女人| 亚洲天堂资源| 亚洲一二三区视频在线观看| 日韩av电影免费在线| www香蕉视频| 久久99久久久久| 日韩暖暖在线视频| 国产性生活网站| 99久久久久国产精品| 日韩精品免费视频| 国产免费无码一区二区| 欧美日韩免费电影| 色呦呦国产精品| 无码粉嫩虎白一线天在线观看| 在线免费黄色| 久久精品视频在线看| 国产精品推荐精品| 国产日韩免费视频| 久久精品久久99精品久久| 992tv成人免费影院| 免费毛片在线播放免费| 亚洲国产一成人久久精品| 亚洲视频在线免费观看| 精品人妻一区二区三区日产乱码卜| 激情综合婷婷| 91精品国产丝袜白色高跟鞋| 香蕉视频禁止18| free欧美| 欧美中文字幕亚洲一区二区va在线| 怡红院av亚洲一区二区三区h| 久久香蕉一区| 亚洲国产aⅴ成人精品无吗| 欧美与动交zoz0z| 免费黄色在线看| 中文字幕一区二区三区在线不卡| 欧美亚洲免费高清在线观看| 久草在现在线| 久久久久国产免费免费| 欧美日韩一区综合| 极品美乳网红视频免费在线观看| 久久亚洲精华国产精华液| 久久波多野结衣| 头脑特工队2在线播放| 99精品久久久久久| 久久亚洲免费| 成人在线观看免费| 国产精品久久久久一区二区三区共| 亚洲ai欧洲av| 国产原创精品视频| 亚洲狠狠丁香婷婷综合久久久| 欧美一级免费在线观看| 怡红院av在线| 性感美女极品91精品| 久久久久久久久久久视频| 无遮挡在线观看| 欧美亚洲国产怡红院影院| 久久久久久久久久久久91| 中文成人激情娱乐网| 91精品国产综合久久精品图片| 制服下的诱惑暮生| 澳门久久精品| 亚洲视频axxx| 少妇高潮一区二区三区喷水| 国模大胆一区二区三区| 欧美在线视频免费播放| 五月天中文字幕| 国产精品一区二区在线观看不卡 | 手机看片福利在线观看| 国产午夜精品一区二区三区视频| 亚洲a∨一区二区三区| 在线观看男女av免费网址| 亚洲成人精品影院| 黄色三级视频在线| 精品入口麻豆88视频| 亚洲精品福利在线| 亚洲欧美日韩第一页| 欧美三级午夜理伦三级中文幕| 91成人精品网站| 国产一区二区在线播放视频| 成人蜜臀av电影| 亚洲精品成人a8198a| missav|免费高清av在线看| 91久久久免费一区二区| 成人一区二区三区仙踪林| 免费欧美激情| 欧美精品在线观看| 日韩黄色片网站| 国产成人啪午夜精品网站男同| 欧美性bbwbbwbbwhd| 日本成a人片在线观看| 午夜精品一区二区三区三上悠亚| 亚洲欧美在线精品| 女仆av观看一区| 久久天天躁日日躁| 无码人妻丰满熟妇精品区| 国产传媒久久文化传媒| 日产精品一线二线三线芒果| 17videosex性欧美| 欧美久久免费观看| 中文字幕在线看高清电影| 欧美1区2区| 国产日韩专区在线| 国产裸舞福利在线视频合集| 亚洲成人综合网站| 91pony九色| 国产亚洲第一伦理第一区| 欧美激情性做爰免费视频| 一级黄色大毛片| 久久久久久久久久久久久女国产乱| 69精品丰满人妻无码视频a片| 天天免费亚洲黑人免费| 亚洲黄页网在线观看| 欧美精品久久久久性色| 精品系列免费在线观看| 神马影院一区二区三区| 天堂电影一区| 亚洲国产精品嫩草影院久久| 国产黄色片在线免费观看| 蜜臀av一区二区| 日韩成人av网站| 中文字幕 在线观看| 亚洲激情电影中文字幕| 日本三级2019| 成人福利视频在线看| 17c丨国产丨精品视频| 国产视频一区二| 久久手机免费视频| 91成人在线免费| 中文字幕一区二区三区av| 国产福利在线免费| 999国产精品视频| 国产一区红桃视频| 免费**毛片在线| 91精品国产91久久综合桃花| 波多野结衣在线网址| 国产剧情一区在线| 黄色一级大片免费| 97久久综合精品久久久综合| 欧美国产精品日韩| 特黄视频在线观看| 欧美色videos| 成人片黄网站色大片免费毛片| 老司机精品视频网站| 秋霞在线观看一区二区三区| 欧美成人精品三级网站| 中文字幕视频一区二区在线有码| 一本色道久久综合熟妇| 亚洲欧美日韩在线| 美女伦理水蜜桃4| 国产欧美一级| 日韩一二三区不卡在线视频| 国产欧美在线观看免费| 粗暴蹂躏中文一区二区三区| 成人午夜免费福利| 色哦色哦哦色天天综合| 黄色一级片一级片| 国产成人午夜视频| 丰满爆乳一区二区三区| 欧美一区电影| 国产91精品入口17c| 少妇在线看www| 中文字幕日韩av电影| 精品乱子伦一区二区| 精品日本美女福利在线观看| a资源在线观看| 国产精品一级黄| 99999精品视频| 第一会所亚洲原创| 成人欧美一区二区三区视频| 九九热线视频只有这里最精品| 久久精品视频导航| 四虎影院在线域名免费观看| 欧美日韩国产另类一区| 国产一级一片免费播放放a| 国产午夜精品久久| 亚洲精品鲁一鲁一区二区三区| 亚洲一区二区三区四区五区午夜| 一本色道久久综合亚洲二区三区 | 三妻四妾的电影电视剧在线观看| 在线看日韩av| 欧美一级视频免费| 欧美午夜不卡在线观看免费| www.av视频在线观看| 中文字幕第一区综合| 成人在线电影网站| 久久91精品久久久久久秒播| 37pao成人国产永久免费视频| 91精品精品| 秋霞在线观看一区二区三区| 亚洲精品观看| 国产在线观看精品| 欧美日韩电影免费看| 欧美丰满少妇xxxx| 日韩在线资源| 亚洲欧洲自拍偷拍| 日日夜夜精品免费| 欧美一区二区视频在线观看2022 | 日韩欧美一区中文| 中文字幕在线观看1| 欧美性猛交xxxx| 国产真人真事毛片| 亚洲人妖av一区二区| 精品国产aaa| 91在线porny国产在线看| 无套内谢丰满少妇中文字幕| 日韩精品一二三| 欧美亚洲精品一区二区| 欧美午夜精品| 影音先锋男人的网站| 日韩免费av| 日本高清一区| 欧美**字幕| 蜜桃久久精品乱码一区二区| 久久久久观看| 国产视频一区二区不卡| 视频精品一区| aa日韩免费精品视频一| 亚洲精品三区| 国产在线观看精品| www.26天天久久天堂| 国产精品大陆在线观看| 国产不卡网站| 日本在线观看天堂男亚洲| 丝袜老师在线| 日本高清不卡在线| 在线能看的av网址| 欧美孕妇性xx| 成人一区福利| 国产精品久久综合av爱欲tv| 亚洲不卡系列| 国产精品中文久久久久久久| 黑人一区二区三区| 国产精品视频公开费视频| 日本肉肉一区| 成人激情黄色网| 免费精品一区| 国产精品视频在线免费观看 | 黄色小说在线观看视频| 亚洲韩国一区二区三区| 日本在线观看中文字幕| 一本一道波多野结衣一区二区| 九九精品免费视频| 欧美体内she精视频| 一级全黄少妇性色生活片| 制服丝袜中文字幕一区| 亚洲AV午夜精品| 亚洲激情 国产| 国产乱视频在线观看| 中文字幕欧美日韩| 怡红院红怡院欧美aⅴ怡春院| 欧美激情一区二区三级高清视频 | 狠狠色狠狠色综合日日五| 日韩中文字幕在线观看视频| 欧美性色黄大片| 国产精品综合在线| 日韩av最新在线观看| 毛片在线播放网址| 久久精品国产91精品亚洲 | 天天影视网天天综合色在线播放| 中文字幕视频网| 欧美日韩成人在线| 亚洲第一黄色片| 日韩精品在线观看视频| 午夜免费福利在线观看| 另类专区欧美制服同性| 91在线三级| 国产欧美日韩亚洲精品| 91综合精品国产丝袜长腿久久| 欧美一二三四五区| 亚洲色图88| 国产真实乱子伦| 国产专区综合网| 不卡一区二区在线观看| 亚洲同性gay激情无套| 久久久久久天堂| 色88888久久久久久影院野外| 99久久婷婷国产一区二区三区| 日韩精品久久久久| 成人黄色网址| 国产91久久婷婷一区二区| 国产色99精品9i| 水蜜桃亚洲一二三四在线| 亚洲网站啪啪| 日韩成人精品视频在线观看| 91丨porny丨首页| 亚洲色图综合区| 欧美在线免费观看亚洲| 男人的天堂a在线| 日韩在线视频播放| 日韩免费福利视频| 高清国产一区| 亚洲二区三区不卡| 黄色片在线免费| 99国产精品久久久久久久久久| 黑人巨大精品一区二区在线| 在线亚洲精品福利网址导航| 亚洲乱熟女一区二区| 日韩三级影视基地| 巨胸喷奶水www久久久免费动漫| 国产精品一区二区免费看| 亚洲老妇激情| 亚洲欧美aaa| 国产欧美一区在线| 一级成人黄色片| 亚洲成人av在线播放| 国产黄大片在线观看画质优化| 国产精品久久久久久久久借妻| 欧美做受69| www精品久久| 国产suv精品一区二区三区| 免费黄色激情视频| 欧美日韩一区不卡| 国产在线观看网站| 国产精品91久久久久久| 日韩美女精品| 一区二区传媒有限公司| 不卡一区二区在线| 中文字幕在线观看免费视频| 日韩精品一区在线| 日本动漫理论片在线观看网站| 成人亲热视频网站| 国产精品久久久久久影院8一贰佰| 中文字幕视频在线免费观看| 国产三级三级三级精品8ⅰ区| 国产剧情在线视频| 亚洲精品色婷婷福利天堂| 亚洲色图官网| 欧美极品一区二区| 视频一区二区国产| 日韩福利在线视频| 欧美三日本三级三级在线播放| 国产在线视频你懂得| 国产精品劲爆视频| 久久大综合网| 一级黄色在线播放| 亚洲狠狠丁香婷婷综合久久久| 精品国产一区二区三区不卡 | 国产亚洲一区二区在线观看| 一级片中文字幕| 日韩不卡在线观看| 在线男人天堂| 丝袜美腿玉足3d专区一区| 男男视频亚洲欧美| 青青操在线视频观看| 欧美一级在线视频| gogo高清在线播放免费| 精品国产一区二区三区免费| 国产精品美女久久久浪潮软件| 中文字幕人妻一区二区| 欧美日韩精品一区二区在线播放 | 久久久久在线观看| 日韩理论电影中文字幕| 国产理论在线播放| 亚洲色图一区二区三区| 国模人体一区二区| 欧美自拍视频在线| 青青草国产成人a∨下载安卓| 在线一区二区不卡| 亚洲v中文字幕| 国产二区在线播放| 91在线视频导航| 亚洲看片一区| 五月天综合视频| 在线不卡免费av| 多野结衣av一区| 亚洲 国产 日韩 综合一区| 国产精品99久久不卡二区| av大片免费在线观看| 有码中文亚洲精品| 综合久久成人| 日韩中文字幕二区| 亚洲男女毛片无遮挡| 蜜桃视频在线观看网站| 国产在线久久久| 宅男噜噜噜66一区二区| 美国黄色特级片| 欧美精品一区二区三区四区| 性感美女一区二区在线观看| 天堂а√在线中文在线| 久久久久久久一区| 国精产品一品二品国精品69xx| 国产精品视频网站| 亚洲国产一区二区三区a毛片| 波多野结衣一二三四区| 亚洲精品电影在线| 国产一区二区三区国产精品| 日韩久久一级片|