热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

golang使用protobuf办法详解

后端开发|Golanggolang后端开发-Golang圣诞节祝福源码,vscode清除终端命令行,ubuntu搭建系统,tomcat包没有安装,爬虫开发ide,php获取视频截图

后端开发|Golanggolang使用protobuf办法详解
golang
后端开发-Golang
圣诞节祝福 源码,vscode清除终端命令行,ubuntu 搭建系统,tomcat包没有安装,爬虫开发ide,php获取视频截图,湖北智能化seo优化方法,贷款网站素材lzw
1、下载protobuf的编译器protoc
flash飞机游戏源码,vscode打包发版,ubuntu桌面好小,查看tomcat的监听,sqlite3 导出文本慢,爬虫1001爬虫-百度,php 判断目录存在,SEO网站页面优化包括,网站页面代码body,模板编程编程多么lzw
地址:https://github.com/google/protobuf/releases
linprog源码,vscode操作数据库,ubuntu 安装 ip,tomcat不在系统服务里,爬虫脚本 不动,php学会要多久,清远市seo资料站外包lzw
window:

下载: protoc-3.3.0-win32.zip

解压,把bin目录下的protoc.exe复制到GOPATH/bin下,GOPATH/bin加入环境变量。

当然也可放在其他目录,需加入环境变量,能让系统找到protoc.exe

linux:

下载:protoc-3.3.0-linux-x86_64.zip 或 protoc-3.3.0-linux-x86_32.zip

解压,把bin目录下的protoc复制到GOPATH/bin下,GOPATH/bin加入环境变量。

如果喜欢编译安装的,也可下载源码自行安装,最后将可执行文件加入环境变量。

2、获取protobuf的编译器插件protoc-gen-go

进入GOPATH目录

运行

> go get -u github.com/golang/protobuf/protoc-gen-go

如果成功,会在GOPATH/bin下生成protoc-gen-go.exe文件

3、创建一个test.proto文件

//指定版本//注意proto3与proto2的写法有些不同syntax = "proto3"; //包名,通过protoc生成时go文件时package test; //手机类型//枚举类型第一个字段必须为0enum PhoneType { HOME = 0; WORK = 1;} //手机message Phone { PhoneType type = 1; string number = 2;} //人message Person { //后面的数字表示标识号 int32 id = 1; string name = 2; //repeated表示可重复 //可以有多个手机 repeated Phone phOnes= 3;} //联系簿message ContactBook { repeated Person persOns= 1;}

4、运行如下命令

> protoc --go_out=. *.proto

会生成一个test.pb.go的文件

5、在go语言中使用protobuf

package main; import ( "github.com/golang/protobuf/proto" "protobuf/test" "io/ioutil" "os" "fmt") func write() { p1 := &test.Person{ Id: 1, Name: "小张", Phones: []*test.Phone{ {test.PhoneType_HOME, "111111111"}, {test.PhoneType_WORK, "222222222"}, }, }; p2 := &test.Person{ Id: 2, Name: "小王", Phones: []*test.Phone{ {test.PhoneType_HOME, "333333333"}, {test.PhoneType_WORK, "444444444"}, }, }; //创建地址簿 book := &test.ContactBook{}; book.PersOns= append(book.Persons, p1); book.PersOns= append(book.Persons, p2); //编码数据 data, _ := proto.Marshal(book); //把数据写入文件 ioutil.WriteFile("./test.txt", data, os.ModePerm);} func read() { //读取文件数据 data, _ := ioutil.ReadFile("./test.txt"); book := &test.ContactBook{}; //解码数据 proto.Unmarshal(data, book); for _, v := range book.Persons { fmt.Println(v.Id, v.Name); for _, vv := range v.Phones { fmt.Println(vv.Type, vv.Number); } }} func main() { write(); read();}

golang使用protobuf办法详解更多go语言知识请关注PHP中文网go语言教学栏目。


推荐阅读
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
author-avatar
谢冬彬_868
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有