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. 固定密码 远程桌面的访问密码在每次开机后会刷新一次,可以通过以下方式固定 打开【应用程序】-【附件】-密码和加密密钥(或…