go grpc開發使用

1、安裝proto

下載 Windows 版本

打開官方發布頁面

訪問 Protocol Buffers 的 GitHub Releases 頁面:

👉 https://github.com/protocolbuffers/protobuf/releases

解壓 ZIP 文件

將下載的 ZIP 文件解壓到一個你容易找到的目錄,例如:

C:\protoc\

解壓后你會看到類似結構:

└── bin└── protoc.exe
└── include└── google\protobuf\...

將 protoc.exe 添加到系統 PATH 環境變量

  • 按下 Win + S,搜索 “環境變量” → 選擇 “編輯系統環境變量”。
  • 點擊 “環境變量” 按鈕。
  • 在 “系統變量” 區域,找到并選中 Path,點擊 “編輯”。
  • 點擊 “新建”,然后添加 protoc.exe 所在的路徑,例如
protoc --version# 出現類似這樣的提示,說明安裝成功
libprotoc 31.1

驗證安裝

2、小實例

編寫proto文件user.proto

syntax = "proto3";//版本
package user; //默認包
option go_package ="./user"; //包名service User{//定義rpc方法rpc GetUser(UserRequest) returns (UserResponse);}
//消息體,可以看成結構體
message UserRequest{// 屬性的類型,屬性名=標識符string id = 1;
}message UserResponse{string id = 1;string name = 2;string phone = 3;
}

服務端

package mainimport ("context""fmt""go_collect/grpc/proto/user""google.golang.org/grpc""net"
)type UserServer struct {user.UnimplementedUserServer
}func (u *UserServer) GetUser(cxt context.Context, req *user.UserRequest) (*user.UserResponse, error) {res := &user.UserResponse{Id:    "1",Name:  "張三",Phone: "13812345678",}return res, nil
}
func main() {listen, err := net.Listen("tcp", ":8088")if err != nil {fmt.Println("監聽失敗", err)return}server := grpc.NewServer()user.RegisterUserServer(server, new(UserServer))fmt.Println("GRPC服務端,已經啟動了!")server.Serve(listen)
}

客戶端

package mainimport ("context""fmt""go_collect/grpc/proto/user""google.golang.org/grpc""google.golang.org/grpc/credentials/insecure"
)func main() {// Dial參數 第一個是地址,第二個數據是否加密conn, err := grpc.Dial("127.0.0.1:8088", grpc.WithTransportCredentials(insecure.NewCredentials()))if err != nil {fmt.Println("客戶端遠程連接失敗")return}defer conn.Close()userClient := user.NewUserClient(conn)// 調用方法res, err := userClient.GetUser(context.Background(), &user.UserRequest{Id: "1",})if err != nil {fmt.Println("客戶端調用遠程方法失敗")return}fmt.Println(res)}

編譯命令

編譯命令
protoc --go-grpc_out=:. --go_out=. ./user.proto

參數功能
protocProtocol Buffers 的官方編譯器,用于將 .proto 文件編譯成目標語言的源代碼
–go-grpc_out=:.指定生成 gRPC 服務的 Go 代碼(即服務端和客戶端的 stub),*_grpc.pb.go 文件
–go_out=.生成 Protocol Buffers 消息結構體的 Go 代碼(即數據結構、序列化/反序列化方法),*.pb.go
./user.proto指定輸入的 .proto 文件路徑。

項目結構

在這里插入圖片描述

啟動服務端

在這里插入圖片描述

客戶端獲取

在這里插入圖片描述

protobuf 底層數據實現原理

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

grpc服務鏈接原理分析

在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

MyBatis分頁:PageHelper

MyBatis分頁:PageHelper 📖 前言:為什么需要分頁? 在處理大量數據時,一次性從數據庫查詢并返回所有結果是不可行的,這會帶來巨大的性能和內存開銷。分頁是解決這一問題的標準方案。而PageHelper是一個極其流…

Gin框架:構建高性能Go Web應用

Gin框架:構建高性能Go Web應用 Gin是Go語言中最受歡迎的Web框架之一,以其高性能、簡潔API和豐富的中間件支持而聞名。本文將帶你從零開始,逐步掌握Gin框架的核心概念和高級特性,并通過實際代碼示例演示如何構建高效的Web應用程序。…

IO進程——線程、IO模型

一、線程Thread1、引入1.1 概念相當于是一個輕量級的進程,為了提高系統的性能引入線程,在同一進程中可以創建多個線程,共享進程資源1.2 進程和線程比較相同點:都為操作系統提供了并發執行的能力不同點:調度和資源&…

人工智能概念:NLP任務的評估指標(BLEU、ROUGE、PPL、BERTScore、RAGAS)

文章目錄一、評估指標基礎1. 準確率(Accuracy)2. 精確率(Precision)3. 召回率(Recall)4. F1-Score5. 示例二、文本生成專用指標1. BLEU:機器翻譯與標準化文案的“質量標尺”1.1 計算流程&#x…

團隊對 DevOps 理解不統一會帶來哪些問題

團隊對DevOps理念與實踐的理解不統一、片面甚至扭曲,是導致眾多企業DevOps轉型失敗的根本原因,它將直接引發一系列深層次的、相互關聯的嚴重問題。核心體現在:轉型極易淪為“為了工具而工具”的盲目自動化,導致最核心的文化變革被…

企業級實戰:構建基于Qt、C++與YOLOv8的模塊化工業視覺檢測系統(基于QWidget)

目錄一、概述二、項目目標與技術架構2.1 核心目標2.2 技術選型2.3 軟件架構三、AI推理DLL的開發 (Visual Studio 2019)3.1 定義DLL接口 (DetectorAPI.h)3.2 實現核心功能 (DetectorAPI.cpp)四、Qt Widget GUI應用程序的開發4.1 項目配置 (.pro 文件)4.2 UI設計 (mainwindow.ui)…

SVN自動化部署工具 腳本

SVN自動化部署工具 功能概述 這是一個自動化部署SVN倉庫的bash腳本,主要功能包括: 自動安裝SVN服務(如未安裝) 創建SVN項目倉庫 配置多用戶權限 設置自動同步到網站目錄 提供初始檢出功能 下載地址 https://url07.ctfile…

Facebook主頁變現功能被封?跨境玩家該如何申訴和預防

不少跨境玩家在運營Facebook公共主頁時,最期待的就是通過變現工具獲得穩定收入。但現實中,經常會遇到一個扎心的問題:主頁好不容易做起來,卻突然收到提示——“你的變現功能已被停用”。這意味著收入中斷,甚至可能導致…

安裝es、kibana、logstash

下載 elk 下載地址 elasticsearch地址: https://www.elastic.co/cn/downloads/elasticsearch kibana地址: https://www.elastic.co/cn/downloads/kibana logstash地址: https://www.elastic.co/cn/downloads/logstash 解壓elk 創建es全家桶文件夾 cd /usr/local mkdir elk …

Django admin 后臺開發案例【字段/圖片】

這是一個簡單的django admin 管理后臺,這個應用案例主要是給運營人員進行填寫數據 主要功能包括: 上傳圖片功能【選擇上傳時可以預覽】【替換已有數據中的圖片時可以預覽新舊圖片】 每條數據都將會記錄操作歷史。記錄操作人是誰?修改內容是什么?并且定位責任到某一員。 …

【C++】const和static的用法

目錄🚀前言💻const:“只讀”的守護者💯修飾普通變量💯修飾指針💯修飾函數💯修飾類成員💯修飾對象🌟static:“靜態存儲”與“作用域控制”💯修飾全…

F019 vue+flask海外購商品推薦可視化分析系統一帶一路【三種推薦算法】

文章結尾部分有CSDN官方提供的學長 聯系方式名片 B站up: 麥麥大數據 關注B站,有好處! 編號: F019 關鍵詞:海外購 推薦系統 一帶一路 python 視頻 VueFlask 海外購電商大數據推薦系統源碼 (三種推薦算法 全新界面布局…

【大數據專欄】流式處理框架-Apache Fink

Apache Fink 1 前言 1.1 功能 1.2 用戶 國際 國內 1.3 特點 ◆ 結合Java、Scala兩種語言 ◆ 從基礎到實戰 ◆ 系統學習Flink的核心知識 ◆ 快速完成從入門到上手企業開發的能力提升 1.4 安排 ◆ 初識Flink ◆ 編程模型及核心概念 ◆ DataSet API編程 ◆ Data…

向內核社區提交補丁

一、背景 內核的版本一直以來一直在持續迭代,離不開眾多開發者的貢獻。有時候我們會根據項目要求基于現有的內核版本開發一些新的功能或者修復掉一些特定場下的問題,我們是可以將其提交給社區的。 一般提交社區有兩個基本原則,一是提交的補…

TENGJUN-USB TYPE-C 24PIN測插雙貼連接器(H14.3,4腳插板帶柱):USB4.0高速傳輸時代的精密連接方案解析

在高速數據傳輸與多設備互聯需求日益增長的當下,USB TYPE-C接口憑借其可逆插拔、高兼容性的優勢成為主流,而TENGJUN推出的USB TYPE-C 24PIN測插雙貼連接器(規格:H14.3,4腳插板帶柱) ,以對USB4.0…

企業級 Docker 應用:部署、倉庫與安全加固

1 Docker簡介及部署方法 1.1 Docker簡介 Docker之父Solomon Hykes:Docker就好比傳統的貨運集裝箱 Note 2008 年LXC(LinuX Contiainer)發布,但是沒有行業標準,兼容性非常差 docker2013年首次發布,由Docker, Inc開發1.1.1 什么是do…

rust語言 (1.88) 學習筆記:客戶端和服務器端同在一個項目中

同一項目下多個可執行文件,多個子項目參照以下: 一、項目目錄 項目/|-- client/|-- main.rs|-- Cargo.toml|-- server/|-- main.rs|-- Cargo.toml|-- Cargo.toml二、項目公共 Cargo.toml [workspace] # 定義Rust工作區配置 members …

mac本地安裝mysql

本人環境 macOs 14.5 1.下載安裝mysql https://dev.mysql.com/downloads/mysql/ 配置環境變量,打開terminal vim ~/.bash_profile 添加MYSQL_HOME/usr/local/mysql 在PATH中添加 通過mysql --version命令查看版本 2.開啟mysql 打開終端teminal,輸入命令 sudo…

面試前端遇到的問題

面試官讓我寫一個delay函數然后這是我寫的代碼async function delay(){setTimeout(function() {}, 3000); }面試官就和我說不是這個,用promise當時就蒙了,什么東西,為什么要用promise然后問豆包說Promise 是 JavaScript 中用于處理異步操作的…

Ubuntu Desktop 22.04.5 LTS 使用默認的 VNC 遠程桌面

1. 打開 VNC 打開設置 - 分享 - 遠程桌面2. 配置 VNC 打開遠程桌面 啟用vnc 選擇vnc密碼訪問 配置密碼3. 固定密碼 遠程桌面的訪問密碼在每次開機后會刷新一次,可以通過以下方式固定 打開【應用程序】-【附件】-密碼和加密密鑰(或…