Go语言---linux下安装golang protoc详细教程以及完整安装protoc-gen-go工具

news2024/12/22 20:32:35

在[分布式网络通讯框架]----Protobuf安装配置–附带每一步截图中,我们详细介绍了Protobuf是什么,为什么要使用Protobuf,以及在linux环境中,如何安装Protobuf。Protobuf 在 .proto 定义需要处理的结构化数据,可以通过 protoc 工具,将 .proto 文件转换为 C、C++、Golang、Java、Python 等多种语言的代码,兼容性好,易于使用。现在在学习Go语言的过程中,也需要使用Protobuf,所以在安装Protobuf的基础上,在继续安装Go语言环境下使用Protobuf的必要步骤,即protoc-gen-go 的安装。

1.检查protoc是否安装

protoc --version
在这里插入图片描述

2.将安装好的文件夹移动到/usr/local

cp /protobuf /usr/local
在这里插入图片描述

3.拉取环境

在 Golang 中使用 protobuf,还需要安装 protoc-gen-go,这个工具用来将 .proto 文件转换为 Golang 代码。

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

4.写一个.proto文件

syntax = "proto3";

package geecachepb;

message Request {
  string group = 1;
  string key = 2;
}

message Response {
  bytes value = 1;
}

service GroupCache {
  rpc Get(Request) returns (Response);
}

这时候进行编译 protoc --go_out=. *.proto 会报错

在这里插入图片描述

说明当前路径没有在环境变量中,需要进行如下配置:

5.配置环境变量

protoc-gen-go 将自动安装到 $GOPATH/bin 目录下,也需要将这个目录加入到环境变量中。Go的安装教程在另一篇博客中,相关环境变量的配置也在其中Go语言—Linux安装Golang环境以及VScode远程搭建环境
在这里插入图片描述

6.进入vim ~/.bashrc

在文件下方

xport GOPATH=/home/go
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

在这里插入图片描述

保存并使其生效source ~/.bashrc

7.进入/etc/profile

在下方添加如下配置:

export PROTOBUF=/home/go
export GOROOT=/usr/local/go
export GOPATH=/home/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin:$PROTOBUF/bin/linux_amd64

其中新添加的是第一句和最后PATH中的PROTPBUF环境变量,

在这里插入图片描述

  • 这里的路径要和自己实际的路径相匹配,我的路径如上配置以及相关文件位置如第五步图中所示
  • 保存并使其生效source /etc/profile

8. 打开新的命令行,进入.proto文件所在的文件夹,再次执行 protoc --go_out=. *.proto 如果报错如下:

protoc-gen-go: unable to determine Go import path for "geecachepb.proto"
Please specify either:
        • a "go_package" option in the .proto source file, or
        • a "M" argument on the command line.
See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.
--go_out: protoc-gen-go: Plugin failed with status code 1.

原因是找不到该文件编译出来的golang文件的导出目录。
进入.proto文件,添加如下语句:

option go_package="./";

整体代码如下:

syntax = "proto3";

package geecachepb;

option go_package="./";

message Request {
  string group = 1;
  string key = 2;
}

message Response {
  bytes value = 1;
}

service GroupCache {
  rpc Get(Request) returns (Response);
}

9. 再次执行 protoc --go_out=. *.proto 成功~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1970790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Surya - OCR、布局分析、阅读顺序、语言检测

文章目录 一、关于 Surya功能特性例子训练托管API商业用途 二、安装手动安装 三、用法1、交互应用2、OCR(文本识别)来自 python编译 3、文本行检测From python 4、布局分析From python 5、阅读顺序From python 四、限制五、故障排除六、基准测试OCRGoogl…

react引入高德地图并初始化卫星地图

react引入高德地图并初始化卫星地图 1.安装依赖 yarn add react-amap amap/amap-jsapi-loader2.初始化地图 import AMapLoader from "amap/amap-jsapi-loader"; import { FC, useEffect, useRef, useState } from "react";const HomeRight () > {con…

高速总线概述(二):高速总线技术要点(比特流高速数据传输,编、解码、CRC校验及扰码结构,链路同步)

前言: 读 嵌入式高速串行总线技术 基于FPGA实现与应用_张峰 记 高速串行总线技术技术点 高速串行总线技术点 (1)采用串行比特流实现高速数据传输,数据以帧格式进行传输,以帧头(SOF)、…

串口调试可能遇见的常见问题和排查方法

串口UART作为嵌入式应用和通讯领域中最常用的接口之一,接口协议虽然简单,但在实际应 用中不同设备之间的通讯也会存在各种小问题,下面对使用中各种常见的问题做下总结和梳 理,可作为调试参考。 01串口通信常见问题 串口通信乱码…

嵌入式多线程

作业一&#xff1a; 使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程2拷贝后一半&#xff0c;主线程回收两个分支线程的资源 #include <myhead.h> #define BUF_SIZE 10 //定义缓冲区大小typedef struct{char* sfile;char* tfile…

springboot系列教程(三十一):springboot整合Nacos组件,环境搭建和入门案例详解

一、Nacos基础简介 1、概念简介 Nacos 是构建以“服务”为中心的现代应用架构&#xff0c;如微服务范式、云原生范式等服务基础设施。聚焦于发现、配置和管理微服务。Nacos提供一组简单易用的特性集&#xff0c;帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管…

MySQL高阶(九)——窗口函数

文章目录 MySQL高阶(九)——窗口函数特点语法结构窗口函数分类准备数据 序号函数聚合函数分布函数CUME_DIST&#xff08;累计分布值&#xff09;PERCENT_RANK &#xff08;等级值&#xff09; 前后函数LAG函数LEAD函数 头尾函数FIRST_VALUE和LAST_VALUENTH_VALUE(expr, n&#…

贪心(区间)

905. 区间选点 - AcWing题库 #include<bits/stdc.h> using namespace std; const int N1e510;struct Range {int l,r;bool operator <(const Range&m)const{return r<m.r;} }range[N];int main() {int n;cin>>n;for(int i0;i<n;i){cin>>range[…

汉诺塔(C++)

解决汉诺塔问题是程序递归思想最基本的体现&#xff0c;问题以及规则如下&#xff1a; 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上…

测评自养号与机刷:电商平台推广的深度解析与区别探讨

在电商平台上&#xff0c;产品和店铺的评价至关重要&#xff0c;许多买家在购买前都会仔细查看评论&#xff0c;比较同类产品的口碑&#xff0c;以便做出明智的选择。今天&#xff0c;我们将探讨测评自养号与机刷之间的区别。 测评一直是各大电商平台常用的推广手段&#xff0c…

心算项目攻略:最大化卡牌得分技巧

目录 题目描述代码逻辑原理总结解析&#xff1a;代码逻辑&#xff1a;示例场景&#xff1a;总结&#xff1a; 题目 选自力扣 心算项目的挑战比赛中&#xff0c;要求选手从 N 张卡牌中选出 cnt 张卡牌&#xff0c;若这 cnt 张卡牌数字总和为偶数&#xff0c;则选手成绩「有效」…

AI绘画工具推荐:Stable Diffusion的新境界

前言 在AI绘画的世界里&#xff0c;Stable Diffusion无疑是一颗璀璨的明星。然而&#xff0c;对于许多用户来说&#xff0c;切换不同的UI界面和管理众多模型是一项挑战。今天&#xff0c;我们为大家介绍一款革命性的工具——Stability Matrix&#xff0c;它将彻底改变你对Stabl…

JavaScript前端面试题——fetch

什么是fetch&#xff1f; fetch&#xff1a;fetch是浏览器内置的api&#xff0c;用于发送网络请求 ajax&axios&fetch的关系 ajax&#xff1a;ajax 是一种基于原生 JavaScript 的异步请求技术。它使用 XMLHttpRequest 对象来发送请求和接收响应。 axios&#xff1a;…

MP4标准格式深度解析

&#x1f60e; 作者介绍&#xff1a;欢迎来到我的主页&#x1f448;&#xff0c;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff08;领取大厂面经等资料&#xff09;&#xff0c;欢迎加我的…

校园选课助手【1】-项目整体架构从此开始

项目背景 随着高校招生规模的不断扩大&#xff0c;学生选课需求日益增长。为提高选课效率&#xff0c;降低学生选课压力&#xff0c;本项目旨在开发一款校园选课助手软件。 项目目标:开发一款具有以下特点的校园选课助手软件&#xff1a; 易用性&#xff1a;界面简洁&#xff…

微信-公众号/订阅号推送消息(js版本)

1.登录或注册微信测试号 &#xff08;测试号的名称由官方自动生成&#xff0c;不能更改&#xff09; 微信测试号入口&#xff1a;微信公众平台 ​ 2.登录进去后会看到自己的appId和appsecret &#xff08;这两个参数都需填入代码中&#xff09; ​ 3.检查是否安装nodeJs…

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-3-启动浏览器(详细教程)

软件测试微信群&#xff1a;https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 1.简介 通过前边两篇文章跟随宏哥学习想必到这里已经将环境搭建好了&#xff0c;今天就在Java项目搭建环境中简单地实践一下&#xff1a; 启动两大浏览器。按市场份额来说&#xff0c…

[极客大挑战 2019]BuyFlag1

这个题目比较常规&#xff0c;算是我遇到的简单题&#xff0c;也是这段时间第一个独立解出的&#xff0c;有点小开心。 首先打开靶机&#xff0c;一个平平无奇的纳新页面&#xff0c;很容易找到 /pay.php 看一下pay.php 这里说了几个条件&#xff1a;需要100000000&#xff0c…

【iOS】copystrong原理+深浅拷贝+完全拷贝

Copy&Strong原理 Copy探究 在回答copy的各种问题前&#xff0c;我们需要先了解我们为什么要使用copy。 拷贝的目的 &#xff1a; 产生一个副本对象&#xff0c;跟源对象互不影响 修改了源对象&#xff0c;不会影响副本对象修改了副本对象&#xff0c;不会影响源对象 iOS…

量化方法怎么选?如何评估量化后的大模型LLM?

文章内容总结自&#xff1a;Evaluating Quantized Large Language Models&#xff08;https://arxiv.org/abs/2402.18158&#xff09; 如果想深入了解量化的基本概念和如何用代码实现请参考&#xff1a; Michael&#xff1a;用python代码深入浅出量化概念 &#xff08;https…