Protocol Buffers

听说go语言越来越火了?那么请收下这一份go语言书单吧!

廉价感情. 提交于 2020-07-28 09:45:01
关注公众号【程序员书单】后回复“book”即可领取30+精品免费电子书 ​ Go 是一种简单、小巧、令人愉悦的语言。它也有一些犄角旮旯,但绝大部分是经过精心设计的。它的学习速度令人难以置信,并且规避了其他语言中一些不那么广为人知的特性。 现如今越来越多的互联网公司开始使用go语言,有的初创公司开始使用go语言打造基础架构,而知乎这样的公司也基本上踏上了go语言的路子,或许,未来的互联网公司会越来越多地使用golang,那么,你想学习一下这门未来的语言么,今天就来推荐一份go语言书单吧。 go语言系列书单 ​ Go语言核心编程 Go语言的核心语言特性包括:类型系统、接口、并发。这三部分是Go语言精华、优美、也是重要的特征,本书紧密围绕这三个主题展开。以“类型系统”为例,Go语言中的类型有:简单类型、复合类型、命名类型、未命名类型、静态类型、动态类型、底层类型、接口类型、具体类型以及类型字面量等诸多概念,这些概念在其他Go类图书里面鲜有介绍,本书试图帮助读者梳理清楚这些类型的含义,建立概念,认清类型本质并学会正确使用; 在接口章节,不单介绍了接口概念和用法,还深入分析了接口的机制,使读者对Go语言非侵入式的接口有更深入的理解;在并发编程章节,书中给出了5个并发编程范式,并用图描述并发程序的模型,通俗易懂,这也是本书读特点。 此外本书还拿出一整章内容介绍Go语言编程过程中可能遇到的陷阱

github.com/gogo/protobu: invalid pseudo-version: revision is shorter than canonical

久未见 提交于 2020-07-28 09:32:05
编译执行go mod tidy时,出现了这个错误,挺恶心的: xxx requires github.com/micro/go-plugins@v1.3.0 requires k8s.io/api@v0.0.0-20190726022912-69e1bce1dad5 requires github.com/gogo/protobuf@v0.0.0-20190410021324-65acae22fc9: invalid pseudo-version: revision is shorter than canonical 搞了大半天,终于找到原因: https://github.com/golang/go/issues/3439 解决办法,在go.mod中加: replace github.com/gogo/protobuf v0.0.0-20190410021324-65acae22fc9 => github.com/gogo/protobuf v0.0.0-20190723190241-65acae22fc9d 搞定。 来源: oschina 链接: https://my.oschina.net/u/4358445/blog/4337102

python讀取和寫入caffe-ssd中lmdb data

↘锁芯ラ 提交于 2020-07-28 08:02:36
原文: https://zhuanlan.zhihu.com/p/76318150 lmdb是Cafffe中应用的一种数据库,采用内存-映射文件(memory-mapped files),拥有非常好的I/O性能,而AnnotatedDatum是caffe在LMDB数据库上保存数据的一种格式,主要用于SSD等目标检测模型训练数据的保存。 在SSD-caffe的官方代码中(好像不算官方,是第三方实现的),模型训练是通过自定义层读取读取LMDB数据库文件进行数据导入的,而指定格式的LMDB数据则是通过两个脚本调用C++库生成,查阅代码后发现对应C++库只能读取图像文件,而笔者的训练数据格式特殊,要想生成对应的LMDB文件就必须改caffe的代码并编译,或者自己写一个工具来生成LMDB文件,毫无疑问后者更简单,因此 本文主要内容是如何在Python下生成正确格式的LMDB数据以用于训练 ,以下正文。 首先我们按照官方的脚本生成了正确格式的lmdb文件,然后通过代码读取进来查看它的结构 import lmdb import numpy as np import cv2 from caffe.proto import caffe_pb2 lmdb_env = lmdb.open('VOC0712_test_lmdb') lmdb_txn = lmdb_env.begin() # 生成处理句柄

protocol buffer 基础

爱⌒轻易说出口 提交于 2020-07-28 06:11:15
我们知道接口传输数据的格式有XML,它是 web services 使用的传输数据的格式,在web services 中叫 WSDL。 https://www.w3school.com.cn/wsdl/index.asp 不过 web Services 已经是被淘汰的技术了。 现在更是主流的是使用JSON作为数据传输格式。HTTP + JSON是黄金搭档。 什么是protocol buffer protocol buffer是一种与语言和平台无关。 Protocol Buffer是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。 protocol buffer 是如何使用 定义 xx.proto 文件,即 接口数据格式。 使用 proto 命令生成对应语言脚本。 通过语言脚本设置接口要发送/接收的数据。 定义 .proto 文件, 创建一个 foo.proto 文件中定义你需要做串行化的数据结构信息。每个ProtocolBuffer信息是一小段逻辑记录,包含一系列的键值对。 这里定义一个简单的 foo.proto 文件定义了个人信息: syntax = "proto2"; package info; message

Jetbrains插件Protobuf Generator,支持GO等多种语言

蹲街弑〆低调 提交于 2020-07-27 12:24:37
Protobuf Generator是基于GenProtobuf开发的一款jetbrains插件,在GenProtobuf的基础上增加了对PHP,GO和go-micro的支持。以替代命令行生成方式使得生成代码更加便捷。支持jetbrains全系列IDE(idea,phpstrom,goland,webstrom等)。 插件使用说明: 1,使用插件前需要安装protoc 2,在IDE(idea,goland,phpstrom等。。)中的File->Settings->Plugins,Marketplace中搜索Protobuf Generator并安装和重启IDE 3,配置生成代码规则。在菜单栏Tools中选择Configure GenProtoBuf。 4,选中项目中的.proto文件,右键生成代码 如果只生成单一语言类型,并把生成代码放到当前目录,可以通过配置Quick Gen选项。右键生成时选择quick gen protobuf here 如果需要一键同时生成多种语言并把代码放到指定目录,可以勾选多种语言。右键生成时选择quick gen protobuf rules 来源: oschina 链接: https://my.oschina.net/u/4249250/blog/4287323

golangWeb框架---github.com/gin-gonic/gin学习一(路由、多级路由、参数传递几种形式)

左心房为你撑大大i 提交于 2020-07-25 04:58:17
文章目录 Gin介绍 安装 快速开始 路径参数 构造参数 post传参 get+post混合形式 构造Map格式 分组路由 Gin介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本。具有快速灵活,容错方便等特点。其实对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错。框架更像是一些常用函数或者工具的集合。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。 安装 下载安装 $ go get -u github.com/gin-gonic/gin 1 项目中导入 import "github.com/gin-gonic/gin" 1 (可选)导入NET/HTTP。例如,如果使用诸如HTTP.StasuCK之类的常数,则需要这样做。 import "net/http" 1 快速开始 让我们先通过一个简单的例子,迅速的了解以下 以下demo代码摘自Gin的github实例 package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200,

python golang中grpc 使用示例代码详解

佐手、 提交于 2020-07-25 01:51:02
python 1、使用前准备,安装这三个库 pip install grpcio pip install protobuf pip install grpcio_tools 2、建立一个proto文件hello.proto // [python quickstart](https://grpc.io/docs/quickstart/python.html#run-a-grpc-application) // python -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I. hello.proto // helloworld.proto syntax = "proto3"; package test; service Greeter { rpc SayHello(HelloRequest) returns (HelloReply) {} rpc SayHelloAgain(HelloRequest) returns (HelloReply) {} } service Greetera{ rpc SayStudent(Studentid) returns (Student){} } message Student { string msg=1;//json } message Studentid{ string id

想开发IM集群?先搞懂什么是RPC!

ぃ、小莉子 提交于 2020-05-09 20:52:11
本文引用了后端技术指南针公众号“浅谈RPC那些事儿1”和即时通讯网的“即时通讯新手入门:快速理解RPC技术——基本概念、原理和用途”两篇文章的部分内容。 1、引言 经常有开发者在纠结怎么开发IM集群,虽然真正的使用人数,可能用个人电脑单机都能支撑。 你也许会说,明明不需要用到IM集群,干吗要自找麻烦?答曰:“老板说这个得有!”、“万一产品做成了,用户量达到百万、千万级呢?”,各种回答,反此种种。总之,IM集群就是得整一个(先甭管用不用的上...)。 当然,玩笑归玩笑,真正要做到可投入到生产级别的IM集群系统,难度还是相当大的。必竟IM这种长连接应用相比传统Http这种短连接应用太不标准。 我们以一个典型的IM聊天消息传输为例: 假设存在两个正在聊天的用户(用户A和用户B),当A连接的是IM集群中的IM实例1、B连接的是IM集群中的IM实例2,此时当用户A向用户B发送一条聊天消息时,这条消息应该如何传递呢? 我们梳理一下上面这个例子的消息流转过程: 1)IM聊天消息首先会由用户A发往IM实例1; 2)IM实例1会将此条消息转交给IM实例2; 3)IM实例2会将此条消息最终投递给连接在本实例上的用户B。 如上述流程所示,这就是一个IM集群系统中典型的聊天消息投递过程。 那么,这其中涉及到一个关键步骤:即第2)步中如何实现“IM实例1会将此条消息转交给IM实例2”? 此时

protobuf深坑-版本冲突-彻底解决

ⅰ亾dé卋堺 提交于 2020-05-09 20:22:36
由于安装了anaconda ,caffe,后面又安装了pytorch,mmdetection,tensorboardX,导致环境中protoc和protobuf相当混乱 后面在编译caffe的时候,已经编辑不过去了。所以折腾了一段时间,终于知道如何彻底解决这个问题了,麻麻在也不用担心我的protobuf的冲突了。 1:一般protobuf安装有3种方式 apt-get install libprotobuf-dev protobuf-compiler[安装在系统] pip install protobuf==3.0.0[安装在python] conda install libprotobuf=3.0.0[安装在anaconda] 2:针对3种分别卸载 sudo apt-get remove libprotobuf-dev sudo apt-get remove protobuf-compiler sudo apt-get remove python-protobuf sudo rm -rf /usr/local/bin/protoc sudo rm -rf /usr/bin/protoc sudo rm -rf /usr/local/include/google sudo rm -rf /usr/local/include/protobuf* sudo rm -rf /usr

Node.js进阶篇-koa、钩子函数、websocket、嵌入式开发

。_饼干妹妹 提交于 2020-05-09 06:35:17
代码地址如下:<br> http://www.demodashi.com/demo/12932.html 一、简介 koa是由Express原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的Web框架,Koa不定制路由,无冗余的中间件,开发设计方案趋向定制化,所以很适合对业务和技术有灵活要求的web场景。 二、应用 由于restful、加解密、跨域、参数解析、中间件等比较基础,且文档丰富,本小节将直接跳过,侧重于分享以下几点: 1、路由转发时,如何利用钩子函数机制做到controller层业务解耦 2、在socket通信中如何动态加载protobuf进行数据格式交换 3、如何基于websocket绑定相同的端口 4、如何利用c++编写node扩展库 2.1 业务解耦 中间件及钩子函数机制皆为业务解耦的有效实现方式,其中中间件模式因其实现方便而应用广泛, 如koa、express、sails中都曾大量用到, 而钩子函数机制在node生态中被大量用到ORM对数据库的操作,如mongoose、waterline,鲜有在controller层的广泛应用,本小节则尝试分享 一个简易的Hooks实现方式,并应用在koa框架中。 编写koa-hooks, 并提交到npm const hooks = require('hooks') class ApiHooks { constructor