之前的文章中已经展示过如何在C++中使用protobuf,本文将简单示范protobuf在GolangPython中的使用。

Talk is cheap. Show you my code.

首先是Python:

import addressbook_pb2
import random
import uuid def Home():
return addressbook_pb2.Person.HOME def Work():
return addressbook_pb2.Person.WORK def Mobile():
return addressbook_pb2.Person.MOBILE switch = {0: Mobile(), 1: Home(), 2: Work()} # from protobuf to string def Write2AB(addressbook):
for i in range(20):
person = addressbook.people.add()
person.id = i
person.name = 'name: ' + str(i)
person.email = str(i) + '@eamil.com' phone = person.phones.add()
phone.type = switch[random.randint(0, 999) % 3]
phone.number = str(uuid.uuid1()) return addressbook.SerializeToString() def ReadFromAB(addressbook):
i = 1
for people in addressbook.people:
print('\n====== {} ======'.format(i))
print('Person ID: ', people.id)
print('Person Name: ', people.name)
print('Person Email: ', people.email) print('Person PhoneNumber:')
for phone in people.phones:
if phone.type == addressbook_pb2.Person.MOBILE:
print('\t type:Mobile number:{}'.format(phone.number))
elif phone.type == addressbook_pb2.Person.HOME:
print('\t type:Home number:{}'.format(phone.number))
if phone.type == addressbook_pb2.Person.WORK:
print('\t type:work number:{}'.format(phone.number))
i += 1 if __name__ == "__main__":
ab = addressbook_pb2.AddressBook()
abString = Write2AB(ab)
print(abString) # from string to protobuf
ab.ParseFromString(abString)
ReadFromAB(ab)

接下来是Golang:

package main

import (
"fmt"
"strconv" uuid "github.com/satori/go.uuid" "github.com/golang/protobuf/proto"
"github.com/zj/tutorial"
) // Write2AB return []byte from protobuf
func Write2AB(ab *tutorial.AddressBook) ([]byte, error) {
for i := 0; i < 10; i++ {
person := &tutorial.Person{}
person.Id = int32(i)
person.Name = "name" + strconv.Itoa(i)
person.Email = strconv.Itoa(i) + "@email.com" phone := &tutorial.Person_PhoneNumber{}
switch i % 3 {
case 0:
phone.Type = tutorial.Person_MOBILE
case 2:
phone.Type = tutorial.Person_WORK
default:
phone.Type = tutorial.Person_HOME
}
phone.Number = uuid.Must(uuid.NewV4()).String() person.Phones = append(person.Phones, phone) ab.People = append(ab.People, person)
} return proto.Marshal(ab) } // ReadFromBytes read addressbook from []byte
func ReadFromBytes(abByte []byte) (*tutorial.AddressBook, error) {
ab := &tutorial.AddressBook{}
err := proto.Unmarshal(abByte, ab)
if err != nil {
return nil, err
}
return ab, nil
} func main() {
ab := &tutorial.AddressBook{} abBytes, err := Write2AB(ab)
if err != nil {
fmt.Println(err)
return
} ab, err = ReadFromBytes(abBytes)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(ab)
}

本文采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

Protobuf示例:Golang and Python的更多相关文章

  1. 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)

    2017年的golang.python.php.c++.c.java.Nodejs性能对比 本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不 ...

  2. 2017年的golang、python、php、c++、c、java、Nodejs性能对比[续]

    2017年的golang.python.php.c++.c.java.Nodejs性能对比[续] 最近忙,这个话题放了几天,今天来个续集.   上篇传送门: 2017年的golang.python.p ...

  3. golang与python多线程的并发速度

    一.golang的代码 package main import ( "fmt" "time" ) func Text_goroute(a int, b int) ...

  4. 2018-06-21 中文代码示例视频演示Python入门教程第五章 数据结构

    知乎原链 续前作: 中文代码示例视频演示Python入门教程第四章 控制流 对应在线文档: 5. Data Structures 这一章起初还是采取了尽量与原例程相近的汉化方式, 但有些语义较偏(如T ...

  5. 2018-06-20 中文代码示例视频演示Python入门教程第四章 控制流

    知乎原链 续前作: 中文代码示例视频演示Python入门教程第三章 简介Python 对应在线文档: 4. More Control Flow Tools 录制中出了不少岔子. 另外, 输入法确实是一 ...

  6. 想涨工资吗?那就学习Scala,Golang或Python吧

    [编者按]据薪水调查机构 PayScale 提供的数据显示,掌握 Scala,Golang 和 Python 语言以及诸如 Apache Spark 之类的大数据技术,能带来最大的薪水提升.本文作者为 ...

  7. golang和python互相调用

    http://blog.yuanzhaoyi.cn/2018/06/27/golang_python.html python3-ctypes: https://docs.python.org/3.5/ ...

  8. Golang调用Python

    https://yq.aliyun.com/articles/117329 Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发语言.Python很适合让搞算法的写写模型, ...

  9. DES对称加密算法实现:Java,C#,Golang,Python

    数据加密标准(DES,Data Encryption Standard,简写DES)是一种采用块密码加密的对称密钥算法,加密分组长度为64位,其中8.16.24.32.40.48.56.64 等8位是 ...

  10. 2018-06-20 中文代码示例视频演示Python入门教程第三章 简介Python

    知乎原链 Python 3.6.5官方入门教程中示例代码汉化后演示 对应在线文档: 3. An Informal Introduction to Python 不知如何合集, 请指教. 中文代码示例P ...

随机推荐

  1. iOS distribution发布证书过期或者被手动revoke了app会被下架吗?

    ​ 在距离distribution 证书过期一个月(或被手动revoke了)的时候会受到apple的邮件 ​编辑 虽然distribution过期(或者被手动revoke)了,如果你的开发者账号是co ...

  2. Axure 多人协作

    创建团队项目 团队 => 从当前文件创建团队项目 签出的文件才能被修改 签出 签入 发布评论 邀请 编辑的5种状态 和SVN差不多的概念 已有项目导入 https://www.bilibili. ...

  3. flask自定义参数校验、序列化和反序列化

    项目总体结构 我的工厂函数factory.py from settings import setting from flask import Flask from models.models impo ...

  4. IDEA整合SSM框架:简易图书操作模块

    这个SSM整合文章,以图书的增删改查为例 本篇文章源码已上传: Github:https://github.com/RivTian/University-coursework/tree/master/ ...

  5. Codeforce:455A. Boredom (DP)

    https://codeforces.com/problemset/problem/455/A 题意: 给出n个元素,让我们来挑选,如果选了 \(a_k\),获得\(a_k\)点数,同时与\(a_{k ...

  6. VIM 入门手册, (VS Code)

    要想在VScode里使用Vim需要先行按照插件 安装 vim 插件 VS Code 中输入快捷键 shift + ctrl + x, 或直接打开 扩展安装导航 搜索 vim, 选择 Vim , 点击 ...

  7. C++ tuple(STL tuple)模板用法详解

    tuple 是C++ 11新引进的 build-in structure,但其实在其他语言中tuple的使用已经行之有年(e.g. Javascript和Python中都有tuple).C++ 11中 ...

  8. 快捷键:mysql + idea + 浏览器

    mysql快捷键:ctrl+r 运行查询窗口的sql语句ctrl+shift+r 只运行选中的sql语句ctrl+q 打开一个新的查询窗口ctrl+w 关闭一个查询窗口ctrl+/ 注释sql语句 c ...

  9. 如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件

    ​ 某讯的手游保护系统用的都是一套,在其官宣的手游加固功能中有一项宣传是对比较热门的Unity3d引擎的手游保护方案,其中对Dll文件的保护介绍如下, "Dll加固混淆针对Unity游戏,对 ...

  10. 五、java操作swift对象存储(官网样例)

    系列导航 一.swift对象存储环境搭建 二.swift添加存储策略 三.swift大对象--动态大对象 四.swift大对象--静态态大对象 五.java操作swift对象存储(官网样例) 六.ja ...