go-zero學習筆記(三)

利用goctl生成rpc服務

  1. 編寫proto文件
// 聲明 proto 使用的語法版本
syntax = "proto3";// proto 包名
package demoRpc;// golang 包名(可選)
option go_package = "./demo";// 如需為 .proto 文件添加注釋,請使用 C/C++ 樣式的 // 和 /* ... */ 語法。
/* SearchRequest represents a search query, with pagination options to* indicate which results to include in the response. */// 支持import 引入其他.proto文件  但是要求較多,沒有.api文件容易簡易
// 好像是service必須在主文件,引入的proto文件只能包含message定義
import "***.proto";// 枚舉
// 在定義消息類型時,您可能希望它的某個字段僅具有一個預定義的值列表。例如,假設您想要為每個 
// SearchRequest 添加一個 corpus 字段,其中正文可以是 UNIVERSAL、WEB、IMAGES、LOCAL、
// NEWS、PRODUCTS 或 VIDEO。為此,您只需在消息定義中添加 enum 并針對每個可能的值添加一個常量。// 在以下示例中,我們添加了一個名為 Corpus 的 enum(包含所有可能的值)和 Corpus 類型的字段:
// 如您所見,Corpus 枚舉的第一個常量映射到零:每個枚舉定義必須包含一個映射到零的第一個常量作為其
// 第一個元素。原因如下:
// 
// 1. 必須有一個零值,以便我們可以使用 0 作為數字的默認值。
// 2/ 零值必須是第一個元素,以便與 proto2 語義(其中第一個枚舉值始終是默認值)兼容。enum Corpus {CORPUS_UNSPECIFIED = 0;CORPUS_UNIVERSAL = 1;CORPUS_WEB = 2;CORPUS_IMAGES = 3;CORPUS_LOCAL = 4;CORPUS_NEWS = 5;CORPUS_PRODUCTS = 6;CORPUS_VIDEO = 7;
}// 結構體
// SearchRequest 消息定義指定三個字段(名稱/值對),每個字段對應于要包含在此類消息中的每段數據。每個字段都有一個名稱和類型。
// 類型可以指包括基本類型,切片用 repeated 數據類型 表示,也支持map<數據類型,數據類型>, 以及自定義數據類型
// 字段默認是可選的
message SearchRequest {string query = 1;int32 page_number = 2;int32 result_per_page = 3;Corpus corpus = 4;repeated Result results = 6;map<string, string> projects = 8;
}message Result {string url = 1;string title = 2;repeated string snippets = 3;
}message SearchResponse {map<string, int32> projects = 1;
}// 保留字段編寫示例   不重要  保留————》在這個結構體中這幾個字段不能再被使用
// 如果您通過完全移除或注釋掉某個字段來更新消息類型,則將來的用戶可以自行更新該字段編號以對
// 該類型進行更新。如果用戶日后加載同一 .proto 的舊版本(包括數據損壞、隱私 bug 等),
// 這可能會導致嚴重問題。確保不會發生這種情況的一種方法是,指定已刪除字段的字段編號
// (和/或名稱,也可能導致 JSON 序列化問題)為 reserved。如果任何未來用戶嘗試使用這些字
// 段標識符,協議緩沖區編譯器就會抱怨。
message Foo {reserved 2, 15, 9 to 11;reserved "foo", "bar";
}// 定義服務
// 如果在goctl命令中不設置 -m 則一個文件proto文件中只能有一個 service 多個 service 會報錯
// 但是由于import 不好用,且項目上需要分組, 可以編寫多個 service 這樣切記執行命令時增加 -m
service Demo {// 普通的rpc定義 rpc 方法名稱(請求體)returns (響應體);rpc Search(SearchRequest) returns (SearchResponse);// 客戶端流rpc ClientStream(stream SearchRequest) returns (SearchResponse);// 服務端流rpc ServerStream(SearchRequest) returns (stream SearchResponse);// 雙向流rpc TwoStream(stream SearchRequest) returns (stream SearchResponse);
}
  1. 執行goctl命令
goctl rpc protoc xxx.proto --go_out=. --go-grpc_out=. --zrpc_out=. (-m 服務分組時)
  1. 執行結果
    在這里插入圖片描述
    其中:
    etc:靜態配置文件目錄
    demo.go:程序啟動入口文件
    internal:單個服務內部文件,其可見范圍僅限當前服務
    config:靜態配置文件對應的結構體聲明目錄
    logic:業務目錄,所有業務編碼文件都存放在這個目錄下面,logic 為固定后綴
    server:類似于API中的handle層,無需修改
    svc:依賴注入目錄,所有 logic 層需要用到的依賴都要在這里進行顯式注入
    democlient:客戶端調用服務端rpc相關代碼
    pb文件:簡單理解為API中的type文件,還包括其他一些代碼,在服務端和客戶端都需要調用

  2. 接下來你只需要負責logic的具體實現就可以了,當前你也可以對生成的內容進行修改

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894566.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894566.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894566.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Javascript代碼庫-jQuery入門

摘自千鋒教育kerwin的js教程 jQuery 是一個前端庫&#xff0c;也是一個方法庫他里面封裝著一些列的方法供我們使用我們常用的一些方法它里面都有&#xff0c;我們可以直接拿來使用就行了jQuery 之所以好用&#xff0c;很多人愿意使用&#xff0c;是因為他的幾個優點太強大了 優…

【25考研】南開軟件考研復試復習重點!

一、復試內容 復試采取現場復試的方式。復試分為筆試、機試和面試三部分。三部分合計100分&#xff0c;其中筆試成績占30%、機試成績占30%、面試成績占40%。 1.筆試&#xff1a;專業綜合基礎測試 考核方式&#xff1a;閉卷考試&#xff0c;時長為90分鐘。 筆試考查內容范圍…

【最長上升子序列Ⅱ——樹狀數組,二分+DP,純DP】

題目 代碼&#xff08;只給出樹狀數組的&#xff09; #include <bits/stdc.h> using namespace std; const int N 1e510; int n, m; int a[N], b[N], f[N], tr[N]; //f[i]表示以a[i]為尾的LIS的最大長度 void init() {sort(b1, bn1);m unique(b1, bn1) - b - 1;for(in…

012-51單片機CLD1602顯示萬年歷+鬧鐘+農歷+整點報時

1. 硬件設計 硬件是我自己設計的一個通用的51單片機開發平臺&#xff0c;可以根據需要自行焊接模塊&#xff0c;這是用立創EDA畫的一個雙層PCB板&#xff0c;所以模塊都是插針式&#xff0c;不是表貼的。電路原理圖在文末的鏈接里&#xff0c;PCB圖暫時不選擇開源。 B站上傳的…

容器迭代器iterator

文章目錄 1、自定義String實現iterator2、自定義vector實現iterator3、迭代器失效問題 迭代器的功能&#xff1a;提供一種統一的方式&#xff0c;來透明的遍歷容器。 迭代器可以透明的訪問容器內部的元素的值&#xff0c;而無需了解其底層遍歷機制具體是數組的下標還是鏈表的指…

對象的實例化、內存布局與訪問定位

一、創建對象的方式 二、創建對象的步驟: 一、判斷對象對應的類是否加載、鏈接、初始化: 虛擬機遇到一條new指令&#xff0c;首先去檢查這個指令的參數能否在Metaspace的常量池中定位到一個類的符號引用&#xff0c;并且檢查這個符號引用代表的類是否已經被加載、解析和初始化…

傳輸層協議 UDP 與 TCP

&#x1f308; 個人主頁&#xff1a;Zfox_ &#x1f525; 系列專欄&#xff1a;Linux 目錄 一&#xff1a;&#x1f525; 前置復盤&#x1f98b; 傳輸層&#x1f98b; 再談端口號&#x1f98b; 端口號范圍劃分&#x1f98b; 認識知名端口號 (Well-Know Port Number) 二&#xf…

實驗十一 Servlet(二)

實驗十一 Servlet(二) 【實驗目的】 1&#xff0e;了解Servlet運行原理 2&#xff0e;掌握Servlet實現方式 【實驗內容】 改造實驗10&#xff0c;引入數據庫&#xff0c;創建用戶表&#xff0c;包括用戶名和密碼&#xff1a;客戶端通過login.jsp發出登錄請求&#xff0c;請求…

服務SDK三方新版中央倉庫和私服發布詳解

預備信息Github倉庫發布Gradle版本匹配Gradle項目構建全局變量定義Gradle項目Nexus倉庫配置與發布過程Gradle項目發布至Sonatype中央倉庫配置過程總結當我們在實現一個項目技術總結、工具類封裝或SDK封裝,通常是為了方便開發者使用特定服務或平臺而提供的一組工具和API。您可能…

git 新項目

新項目git 新建的項目如何進行git 配置git git config --global user.name "cc" git config --global user.email ccexample.com配置遠程倉庫路徑 // 添加 git remote add origin http://gogs/cc/mc.git //如果配錯了&#xff0c;刪除 git remote remove origin初…

openmv的端口被拆分為兩個 導致電腦無法訪問openmv文件系統解決辦法 openmv USB功能改動 openmv驅動被更改如何修復

我之前誤打誤撞遇到一次&#xff0c;直接把openmv的全部端口刪除卸載然后重新插上就會自動重新裝上一個openmv端口修復成功&#xff0c;大家可以先試試不行再用下面的方法 全部卸載再重新插拔openmv 要解決OpenMV IDE中出現的兩個端口問題&#xff0c;可以嘗試以下步驟&#x…

利用Python高效處理大規模詞匯數據

在本篇博客中&#xff0c;我們將探討如何使用Python及其強大的庫來處理和分析大規模的詞匯數據。我們將介紹如何從多個.pkl文件中讀取數據&#xff0c;并應用一系列算法來篩選和擴展一個核心詞匯列表。這個過程涉及到使用Pandas、Polars以及tqdm等庫來實現高效的數據處理。 引…

LabVIEW雙光子成像系統:自主創新,精準成像,賦能科研

雙光子成像系統&#xff1a;自主創新&#xff0c;精準成像&#xff0c;賦能科研 第一部分&#xff1a;概述 雙光子成像利用兩個低能量光子同時激發熒光分子&#xff0c;具有深層穿透、高分辨率、低光損傷等優勢。它能實現活體深層組織的成像&#xff0c;支持實時動態觀察&…

Deepseek-R1 和 OpenAI o1 這樣的推理模型普遍存在“思考不足”的問題

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

Vue3學習筆記-Vue開發前準備-1

一、安裝15.0或更高版本的Node.js node -v npm -v 二、創建Vue項目 npm init vuelatest 三、Vue項目結構 node_modules: Vue項目運行的依賴文件public&#xff1a;資源文件夾package.json&#xff1a;信息描述文件

Denavit-Hartenberg DH MDH坐標系

Denavit-Hartenberg坐標系及其規則詳解 6軸協作機器人的MDH模型詳細圖_6軸mdh-CSDN博客 N軸機械臂的MDH正向建模&#xff0c;及python算法_mdh建模-CSDN博客 運動學3-----正向運動學 | 魚香ROS 機器人學&#xff1a;MDH建模 - 哆啦美 - 博客園 機械臂學習——標準DH法和改進MDH…

自然語言生成(NLG)算法模型評估方案的硬件配置、系統架構設計、軟件技術棧、實現流程和關鍵代碼

智能化對話中的自然語言生成&#xff08;NLG&#xff09;算法模型評估是一個復雜而多維的過程&#xff0c;它涉及多個評估指標和策略&#xff0c;以確保生成的文本質量、準確性和流暢性。 智能化對話中的NLG算法模型評估是一個涉及多個評估指標和策略的過程。通過選擇合適的評估…

排序算法--基數排序

核心思想是按位排序&#xff08;低位到高位&#xff09;。適用于定長的整數或字符串&#xff0c;如例如&#xff1a;手機號、身份證號排序。按數據的每一位從低位到高位&#xff08;或相反&#xff09;依次排序&#xff0c;每次排序使用穩定的算法&#xff08;如計數排序&#…

數據結構:時間復雜度

文章目錄 為什么需要時間復雜度分析&#xff1f;一、大O表示法&#xff1a;復雜度的語言1.1 什么是大O&#xff1f;1.2 常見復雜度速查表 二、實戰分析&#xff1a;解剖C語言代碼2.1 循環結構的三重境界單層循環&#xff1a;線性時間雙重循環&#xff1a;平方時間動態邊界循環&…

S4 HANA明確稅金匯差科目(OBYY)

本文主要介紹在S4 HANA OP中明確稅金匯差科目(OBYY)相關設置。具體請參照如下內容&#xff1a; 1. 明確稅金匯差科目(OBYY) 以上配置點定義了在外幣掛賬時&#xff0c;當憑證抬頭匯率和稅金行項目匯率不一致時&#xff0c;造成的差異金額進入哪個科目。此類情況只發生在FB60/F…