go语言使用protobuf

wolfred7464 · · 7154 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

网上为什么充斥着大量几乎一模一样而且不正确的教程???

妈的打开一个关于golang和protobuf的教程,无非都是扯他妈的protobuf多么多么牛逼,xml多么多么傻逼,然后就是怎么安装protobuf,然后又是屎一样的示例。

安装过程没一个对的,我搜了那么多博客,全都是一个德行,我先写一下ubuntu的安装步骤,同时适用于mac和其他linux,而且保证是对的。

真的无力吐槽,先说正事,一会接着吐。

一、首先去 https://github.com/google/protobuf 下载protobuf,按照readme的步骤来编译安装。如果执行autogen.sh的过程中出现autoreconf not found的错误,说明没有安装automake,在ubuntu执行sudo apt-get install automake libtool就可以了,其他平台根据实际情况安装。

二、执行 go get -u github.com/golang/protobuf/{proto, proto-gen-go} ,自动安装proto-gen-go

三、把proto-gen-go复制到/usr/local/bin 或者其他路径,只要在包含在PATH环境变量中就可以,为了方便protoc调用它。

四、写一个xx.proto文件,执行protoc --go_out=. xx.proto生成go语言的代码,如果提示libprotoc.so找不到,需要把 /usr/local/lib 添加到LD_LIBRARY_PATH环境变量中。

 

按照这个步骤搞下来,应该都能编译成功了,使用也很简单,网上大量的屎示例,主要是调用Marshal和Unmarshal来编码和解码。

那么问题来了:

1、我用二进制传输消息意义在哪?

        当然就是字节少,传输成本小。

2、妈的二进制不可读啊,怎么解码呢?

        调用Unmarshal函数,把对应类型的对象传入,会自动把二进制解码到传入的对象。

3、拿到一大坨二进制数据,怎么知道能解码到哪个类呢?

        这个问题问得好,妈的没找到任何地方有人提到这件事,强行忽略然后装作会了吗?在扯他妈的protobuf多么多么牛逼的时候都提到自带反射机制,能够类型推导,到底怎么推导你他妈怎么不说啊???

4、难道只能互相知道要传输的类型,然后才能愉快的用protobuf吗?

        知道了类型还用编码干毛啊?直接按照字段顺序硬拼在一起不就行吗?还用protobuf干毛???

 

总之,网上提到protobuf的,我不知道他们是不是真的用过protobuf,抱谷歌爸爸的大腿赶潮流并没有错,但是强行装出一副深藏功与名的样子是一种好风气吗?

最后,我还是建议,做网游协议,还是自己实现序列化和反序列化吧,无非就是加个类型id而已,这就算原始到令人发指了??

下一步就是开始干。


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:wolfred7464

查看原文:go语言使用protobuf

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

7154 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传