Go语言中文网 为您找到相关结果 53

golang实现RPC的几种方式

什么是RPC 远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。 如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用。维基百科:远程过程调用 用通俗易懂的语言描述就是:RPC允许跨机器、跨语言调用计算机程序方法。打个比方,我用go语言写了个获取用户信息的方法getUserInfo,并把go程序部署在阿里云服务器上面,现在我有一个部署在腾讯云上面的php项目,需要调用golang的getUserInfo方法获取用户信息,php跨机器调用go方法的过程就是RPC调用。 golang中如何实现RPC 在golang中实现RPC非...阅读全文

博文 2018-08-21 01:34:46 豆瓣奶茶

golang sha1,base64

1.base64编码 package main //这个语法引入了 encoding/base64 包并使用名称 b64代替默认的 base64。这样可以节省点空间。 import b64 "encoding/base64" import "fmt" func main() { //这是将要编解码的字符串。 data := "abc123!?$*&()'-=@~" //Go 同时支持标准的和 URL 兼容的 base64 格式。编码需要使用 []byte 类型的参数,所以要将字符串转成此类型。 sEnc := b64.StdEncoding.EncodeToString([]byte(data)) fmt.Println(sEnc) //解码可能会返回错误,如果不确定输入信息格式是否正确,那...阅读全文

博文 2015-04-21 03:00:00 benlightning

golang -- 网络字节编解码(2)

以下是利用标准库binary来进行编解码 解码 ①使用bytes.NewReader/bytes.Buffer来存储要解码的ascii串 ②使用binary.Read来解码 package main import ( "bytes" "encoding/binary" "fmt" ) func main() { var pi float64 bpi := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40} buf := bytes.NewReader(bpi) err := binary.Read(buf, binary.LittleEndian, &pi) // 这里可以继续读出来存在变量里, 这样就可以解码出来很多, 读的次序和变...阅读全文

博文 2014-10-04 19:27:04 flyking

Golang使用protobuf

为什么要使用protobuf 最近的项目中,一直使用Json做数据传输。Json用起来的确很方便。但相对于protobuf数据量更大些。做一个移动端应用,为用户省点流量还是很有必要的。正好也可以学习一下protobuf的使用 跟Json相比protobuf性能更高,更加规范 编解码速度快,数据体积小 使用统一的规范,不用再担心大小写不同导致解析失败等蛋疼的问题了 但也失去了一些便利性 改动协议字段,需要重新生成文件。 数据没有可读性 安装 在go中使用protobuf,有两个可选用的包goprotobuf(go官方出品)和gogoprotobuf。 gogoprotobuf完全兼容google protobuf,它生成的代码质量和编解码性能均比goprotobuf高一些 安装protoc 首...阅读全文

博文 2019-06-26 00:32:45 凉初透的风

阿里云首推音乐变速短视频SDK,上线抖音 freestyle只需1步

摘要: 近期,阿里云短视频SDK更新了V3.3版本,增加了时下热门的实时混音和变速录制功能,这就是前文提到的抖音的核心玩法,也是现在C端年轻用户的主流偏好。 2016年可谓是短视频行业风生水起的一年,2017年更是呈现市场井喷的态势。短视频玩家从从秒拍、美拍到今年刚刚入局的土豆,竞争可谓激烈。值得关注的还有快手这匹短视频APP黑马,在它的引领下短视频服务被资本和市场普遍看好,据说快手至今已经覆盖4亿用户,日活达6000万之高。最近短视频圈多了一个后起之秀——抖音,这个画风奇绝动感酷炫的短视频APP上线不到半年就迅速走红,它主打的混音和变速玩法让年轻人欲罢不能。 短视频好像拥有一种魔力,可以无限激发用户的创作和表达欲望。这恰恰又是以内容为王的互联网服务之核心所在,所以各类垂直APP...阅读全文

golang与C/C++的简单比较

优点: 良好的跨平台,可交叉编译 简单的工程管理,通过文件夹系统管理,没有类似Makefile的工程管理文件 静态编译,没有动态库的依赖,部署方便,编出来只有一个可执行程序 语法简单易学 天生支持并发,goroutine和channel,适合服务器编程 缺点: 损失10%左右的性...阅读全文

博文 2019-10-09 19:32:44 aside section ._1OhGeD

网易云音乐ncm编解码探究记录

网易云音乐ncm编解码原理 背景 办了个网易黑胶会员,想着整个无损音乐库放walkman里听,不再受流量和音质的苦。万万没想到网易自己搞了个ncm的格式,见都没见过,walkman上没法识别,据说会员过期了还不给播了。 我知道了,这是租赁不是购买,看了下网友们对网易云的口诛笔伐,我倒没啥感觉,黑胶会员这个价格,你说买站内所有音乐版权肯定是不够的,租赁也没啥问题。就是音乐搞租赁这个做法以前没见过不太习惯,我就想在我的随身听上播放ncm仅此而已。 网上有挺多奇技淫巧比如从mv转,从h5元素里抓url等等,感觉都差点意思,想着能不能写个ncm转常见无损格式的软件。为此还去学习了一下音频格式以及编解码的一些基础知识。 研究了大半天,遇到了很多无法逾越的问题,后来在github上发现了有人用c++基于...阅读全文

博文 2019-08-10 23:32:55 欧祎

Golang Gob编码

gob是Golang包自带的一个数据结构序列化的编码/解码工具。编码使用Encoder,解码使用Decoder。一种典型的应用场景就是RPC(remote procedure calls)。 gob和json的pack之类的方法一样,由发送端使用Encoder对数据结构进行编码。在接收端收到消息之后,接收端使用Decoder将序列化的数据变化成本地变量。 有一点需要注意, 发送方的结构和接受方的结构并不需要完全一致 结构体中缺省的字段将不会被发送。而且在接收方,并不需要所有的字段都要有对应的结构属性对应。godoc中的这个例子很形象: 当发送方传递的是struct{A, B int}结构的值的时候,接收方可以允许前9种结构,但是后面4种结构确实不允许的。 个人觉得这种设定是很符合逻辑的:接收...阅读全文

博文 2016-07-11 02:00:06 yjf512

golang protoc grpc编译没效果解决

1、下载github.com/golang/protobuf https://github.com/golang/protobuf 放到$GOPATN/src/github.com/golang目录下 2、安装grpc go get google.golang.org/grpc 3、安装proto go get -u github.com/golang/protobuf/proto go get -u github.com/golang/protobuf/protoc-gen-go 编译grpc/examples/helloworld/helloworld/下的proto文件 protoc --go_out=plugins=grpc:. helloworld.proto 如果编出来的没有加载...阅读全文

博文 2017-02-21 09:00:29 徐学良

Go语言笔记:base64/sha1的使用

1.base64编码 package main //这个语法引入了 encoding/base64 包并使用名称 b64代替默认的 base64。这样可以节省点空间。 import b64 "encoding/base64" import "fmt" func main() { //这是将要编解码的字符串。 data := "abc123!?$*&()'-=@~" //Go 同时支持标准的和 URL 兼容的 base64 格式。编码需要使用 []byte 类型的参数,所以要将字符串转成此类型。 sEnc := b64.StdEncoding.EncodeToString([]byte(data)) fmt.Println(sEnc) //解码可能会返回错误,如果不确定输入信息格式是否正确,那...阅读全文

博文 2016-04-30 19:00:02 qdx411324962

安全URL的Base64编码

之前在《网址压缩的调研分析(续)》介绍过Base62算法,他是一种类似于Base64的哈希算法。今天发现了另一种优化的Base64算法,又参考了下Golang的源码,在encoding/base64/base64.go里面。 const encodeStd = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 传统的Base64用的是A-Z、a-z、0-9,还有+和/,一个64个编码串。 然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通...阅读全文

Go语言学习六:RPC 协议

什么是RPC远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。 如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用。维基百科:远程过程调用用通俗易懂的语言描述就是:RPC允许跨机器、跨语言调用计算机程序方法。打个比方,我用go语言写了个获取用户信息的方法getUserInfo,并把go程序部署在阿里云服务器上面,现在我有一个部署在腾讯云上面的php项目,需要调用golang的getUserInfo方法获取用户信息,php跨机器调用go方法的过程就是RPC调用。直接上代码啦。。。服务端代码:rpc_server.go----...阅读全文

博文 2019-02-16 11:34:43 孙小兵

go语言socket通信初试

听说go的在系统性能方面有很大的优势,最近对go语言产生了极大的兴趣,相对现有的项目用go改造,原有的项目用的ace框架编写的通信的框架,在目前的移动的通信网中忙时有的时候处理不过来,于是先研究试图测试一下socket。由于对go刚刚入门,有些不正确的地方还请高人指点。 由于我们系统通常是不同语言之间通信(之前系统是客户端和服务端都用c++),这里客户端采用java+mina编写,服务端采用go编写,最初设计,像借用go语言中的gob进行编解码,但是经过测试后发现行不通,经过和网友以及一些高人的指点,gob其实针对go语言之间的编解码的,跨语言还真不灵光。有同事建议我用protocolbuffer这个,我一看这个又是定义类似idl文件(之前做了几年的corba技术,对这样的东西有点抵触了,因...阅读全文

博文 2014-10-04 19:26:17 DEC_LIU

RPCX: 一个用Go实现的类似Dubbo的分布式RPC框架

[RPCX](https://github.com/smallnest/rpcx) : 一个用Go实现的类似Dubbo的分布式RPC框架。 * 基于net/rpc,可以将net/rpc实现的RPC项目轻松的转换为分布式的RPC * 插件式设计,可以配置所需的插件,比如服务发现、日志、统计分析等 * 基于TCP长连接,只需很小的额外的消息头 * 支持多种编解码协议,如Gob、Json、MessagePack、gencode、ProtoBuf等 * 服务发现:服务发布、订阅、通知等,支持多种发现方式如ZooKeeper、Etcd等 * 高可用策略:失败重试(Failover)、快速失败(Failfast) * 负载均衡:支持随机请求、轮询、低并发优先、一致性 Hash等 * ...阅读全文

golang和java的byte数组相互转换

golang和java中byte取值范围不一样 o(╯□╰)o,这里是个坑 golang定义如下 // byte is an alias for uint8 and is equivalent to uint8 in all ways. It is // used, by convention, to distinguish byte values from 8-bit unsigned // integer values. type byte byte java定义如下 public final class Byte extends Number implements Comparable { public static final byte MIN_VALUE = -128; publi...阅读全文

博文 2016-10-06 08:00:06 hai046

介绍一下Json的Number

Json的使用基本没有什么难度,就拿Golang来说,直接来个encoding/json包里的func Marshal(v interface{}) ([]byte, error)和func Unmarshal(data []byte, v interface{}) error就能对Json进行编解码了。具体的文件就是采用反射的方法,可以参考我之前的文章『Golang通过反射实现结构体转成JSON数据』。 现在问题来了,如下的map需要大家是如何解析的? {"10000000000":10000000000,"111":1} 如果直接定义一个map来解析,定义成map[string]int64,我们是肯定可以解析成功的,解析的时候会将数据转换为我们需要的数据类型。那么问题来了:如果把类型定义...阅读全文

golang -- 网络字节编解码(1)

在网络传输协议过程中,封包常见的方式一般是: ①头标识+数据头(类型/属性/数据长度)+数据体+尾标识 -->一般还需要转义 ②固定长度 --> 编解码方便,浪费宽带 ③通过结尾标识(eg.通过base64传输,以\0结束) -->编解码方便,浪费 宽带 下面是golang在编解码的常用手段 解码 首先需要把[]byte的ascii串转化为uint8,uint16,uint32,uint64等 (分别对应python的B,H,I,Q).特别要注意大端和小端对齐方式(python大端">",小端"<", 这里也用它们的ascii吧) // 这是一个例子, 解码出 ">HHI" func unpack(data []byte, edian byte) (uint16, uint16, uint3...阅读全文

博文 2014-10-04 19:26:57 flyking

兄弟连区块链培训分享Go语言-实现RPC的方式

“区块链是一门集合密码学、共识算法、智能合约、超级账本等多门技术的复杂性综合学科。”尹正表示,区块链培训机构的师资质量及其对区块链行业的认知水平参差不齐,普通消费者也无从考究。 Go语言主要用作服务器端开发,其定位是用来开发“大型软件”的,适合于很多程序员一起开发大型软件,并且开发周期长,支持云计算的网络服务。Go语言能够让程序员快速开发,并且在软件不断的增长过程中,它能让程序员更容易地进行维护和修改。它融合了传统编译型语言的高效性和脚本语言的易用性和富于表达性。什么是RPC远程过程调用(Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。 如果涉及的软件采用面向对...阅读全文

博文 2018-08-21 14:34:51 兄弟连区块链培训

写在新年第一天的Moba类游戏前后端开发分享

我们之前一段时间做的一个游戏,勉强算是“后端房间分配","战局帧同步(前后端差帧编解码)"和"独立机器人服务器”都体验过一遍了吧,目前项目也属于无人维护的状态,干脆就开源了 https://github.com/genxium/TreasureHunterX,希望对于想做同类游戏的朋友也有帮助。由于这类游戏常会遇到匹配不到真实玩家需要机器人加入陪玩,所以这里也提供一个配套的BotServer仓库(非必须,测试时两个浏览器对战即可)。现在前端(Creator v2.1.3)和后端(Golang + gin as httpv1 framework + Gorilla as websocket lib)被调整为了仅支持1v1模式,但后端仅需较为少量的改动即可支持2v2 ~ 5v5(自己公网测过),...阅读全文

博文 2020-01-02 11:32:45 genxium

win10下golang使用protobuf

json与protobuf做数据传输对比: json用起来的确很方便。但相对于protobuf数据量更大些。做一个移动端应用,为用户省点流量还是很有必要的。正好也可以学习一下protobuf的使用 0、跟Json相比,protobuf 的优缺点: 优点: 性能更高,更加规范; 编解码速度快,数据体积小; 使用统一的规范,不用再担心大小写不同导致解析失败等问题。 缺点: 失去了一些便利性; 改动协议字段,需要重新生成文件; 数据没有可读性; 1、安装protobuf库文件 方法(1)使用go get go get github.com/golang/protobuf/proto(待验证) 方法(2)下载文件 或者直接通过protobuf下载链接,戳这里上下载或git clone下来对应放到到 ...阅读全文

博文 2017-09-21 10:04:58 Gospel元嘉

零拷贝读取文件成go对象

我们观察到从文件读取到go对象,需要两次拷贝: 从文件拷贝到内存,成为[]byte 从[]byte,按照格式进行读取,拷贝到go对象上 怎么样优化这个读取速度呢? 利用mmap,把文件直接映射到内存,go允许把这片内存已经转化成[]byte来使用 直接在这个[]byte上“展开”go对象 所谓”展开“就是一个reinterpret cast,对一个指针的类型重新解读。 var bytes = []byte{ 16, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 'h', 'e', 'l', 'l', 'o'} 假设有这样一个[]byte数组。这个是直接用mmap读取出来的。 var ptr = &bytes[0] 这个ptr就是这片内存区域的指针,...阅读全文

博文 2017-12-06 13:04:46 taowen

golang使用protobuf

为什么要使用protobuf 最近的项目中,一直使用Json做数据传输。Json用起来的确很方便。但相对于protobuf数据量更大些。做一个移动端应用,为用户省点流量还是很有必要的。正好也可以学习一下protobuf的使用 跟Json相比protobuf性能更高,更加规范 编解码速度快,数据体积小 使用统一的规范,不用再担心大小写不同导致解析失败等蛋疼的问题了 但也失去了一些便利性 改动协议字段,需要重新生成文件。 数据没有可读性 安装 在go中使用protobuf,有两个可选用的包goprotobuf(go官方出品)和gogoprotobuf。gogoprotobuf完全兼容google protobuf,它生成的代码质量和编解码性能均比goprotobuf高一些 安装protoc 首先...阅读全文

博文 2017-05-03 09:00:46 花间隐虎

【钱旺】高薪诚聘GO工程师大牛加入(社交媒体)

职位描述: 负责公司IM(即时通信)系统业务开发,接口实现。 涉及消息编解码,集群处理等。 职位需求: - 2年以上相关工作经验,熟悉Go的语言特性,im开发,对socket处理,消息协议有深入了解; - 坚实的Tcp/http协议应用经验, - 熟悉 redis / mysql / mongo等数据库使用场景 - 逻辑清楚,思维清晰,沟通良好,具备良好的分析、理解、解决问题的能力; - 富有团队精神,愿意接受新技术新思维,学习能力良好以上。 - 为自己写的代码骄傲! 高端大气上档次的办公环境,开放式办公,咖啡吧提供下午茶点心,五险一金待遇优厚,周末双休 公司地址:上海市静安区南京西路1266号恒隆广场一期58楼 有意向者,可将简历发送至xuejing@qba...阅读全文

ORM vs. 非 ORM

我一直很喜欢使用 Go 的 database/sql 包来处理数据库。最近,一些涉及 Gorm 的问题激起了我对 Go 中 `使用 ORM` vs. `直接使用 database/sql` 的好奇心。在 ORM 方面曾有过丰富的经验,所以我决定开始一个实验:利用 Gorm 和 非 ORM 编写同一个简单的应用程序,并比较付诸的努力。 这促使我写下了一些关于 ORM 优缺点的想法。如果您对此感兴趣,请继续阅读! ## 非 ORM vs. ORM 的相关经验 实验中,定义了一个可作为博客引擎子集的简单数据库,同时编写一些操作和查询该数据库的 Go 代码,并比较使用纯 SQL 与使用 ORM 的表现。 数据库表如下: ![image](https://raw.githubusercontent.c...阅读全文

博文 2019-09-17 00:30:00 zhoudingding

golang中的RPC调用服务器方法

文链接,参考Golang中文文档:http://docscn.studygolang.com/pkg/net/rpc/#NewServer rpc 包提供了一个方法来通过网络或者其他的I/O连接进入对象的外部方法. 一个server注册一个对象, 标记它成为可见对象类型名字的服务。注册后,对象的外部方法就可以远程调用了。一个server可以注册多个 不同类型的对象,但是却不可以注册多个相同类型的对象。 只有满足这些标准的方法才会被远程调用视为可见;其他的方法都会被忽略: - 方法是外部可见的。 - 方法有两个参数,参数的类型都是外部可见的。 - 方法的第二个参数是一个指针。 - 方法有返回类型错误 事实上,方法必须看起来类似这样 func (t *T) MethodName(argType ...阅读全文

博文 2016-10-14 10:00:05 hellochenlu

详解varint编码原理

什么是Varint编码 Varint是一种使用一个或多个字节序列化整数的方法,会把整数编码为变长字节。对于32位整型数据经过Varint编码后需要1~5个字节,小的数字使用1个byte,大的数字使用5个bytes。64位整型数据编码后占用1~10个字节。在实际场景中小数字的使用率远远多于大数字,因此通过Varint编码对于大部分场景都可以起到很好的压缩效果。 编码原理 除了最后一个字节外,varint编码中的每个字节都设置了最高有效位(most significant bit - msb)–msb为1则表明后面的字节还是属于当前数据的,如果是0那么这是当前数据的最后一个字节数据。每个字节的低7位用于以7位为一组存储数字的二进制补码表示,最低有效组在前,或者叫最低有效字节在前。这表明varin...阅读全文

博文 2019-09-26 13:02:38 KevinYan

如何选择值得深入学习的技术方向 2018-9-10

如何选择值得深入学习的技术方向不少做开发的小伙伴都有这个困惑:想上进,却不知道到底该选择什么样的技术来深入学习。今天我们就来聊聊选择技术的逻辑,常见的有 4 种:从产品到技术现有技术的延伸需求多寡兴趣我们一个一个来说说。1. 从产品到技术技术只是一种工具,它是用来解决实际生活中的问题的。所以,如果你不知道怎么选择,可以反过来思考这两个问题:我要做什么产品?解决什么问题?因为某一类问题的解决方案,通常是由若干种技术组合出来的。比如说,我要做手游,解决无聊时间太多的问题,那就有几个选择,比如学习 Cocos2D-x、Unity3D。比如说,你想解决企业远程音视频会议效果不好的问题,那就可以学习 C++、ffmpeg、WebRTC等,从传输和音视频编解码上去提升会议系统的效果。所以,如果你对解决某...阅读全文

博文 2018-09-10 17:34:50 明_阳

golang 交叉编译

进入 golang 安装目录 例如 cd /usr/local/go/src sudo CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash sudo CGO_ENABLED=0 GOOS=linux GOARCH=386 ./make.bash sudo CGO_ENABLED=0 GOOS=linux GOARCH=arm ./make.bash sudo CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 ./make.bash sudo CGO_ENABLED=0 GOOS=darwin GOARCH=386 ./make.bash sudo CGO_ENABLED=0 GOOS=freebsd GOARCH=a...阅读全文

博文 2014-10-04 19:25:57 blon

Golang中一个不错的处理 JSON 的库 go-dproxy

Golang 自己就带了 JSON (encoding/json) 处理的库,也有第三方的 simplejson 之类的库,但总是感觉不如Python这样的动态语言方便,在 Python 里,数组和字典的处理都很方便,和 JSON 互转也非常简单。 encoding/json 最大的问题是不够灵活,需要预先定义很多的 struct 来进行编解码,这样对于处理结构不定的 JSON 文件非常不方便。 这里介绍一个名为 go-dproxy 的库,非常方便和简单,不需要预先定义 struct ,还可以类似 XPath 那样查找。 下面是一个例子:http://news.xiashanet.com/e/space/?userid=5025179&kidbjs.xml?feed_filter=2016-...阅读全文

博文 2016-10-08 16:00:00 lintingte

golang C 混编

简单例子 cGo.go package main //#include //void callC() { // printf("Calling C code!\n"); //} import "C" import "fmt" func main() { fmt.Println("A Go statement!") C.callC() fmt.Println("Another Go statement!") } 稍复杂例子 callC.h #ifndef CALLC_H #define CALLC_H void cHello(); void printMessage(char* message); #endif callC.c #include #inc...阅读全文

博文 2018-06-22 22:34:39 wyrover

go语言实现Gob编解码

package main import ( "bytes" "encoding/gob" "fmt" ) // -------------------- // Encode // 用gob进行数据编码 // func Encode(data interface{}) ([]byte, error) { buf := bytes.NewBuffer(nil) enc := gob.NewEncoder(buf) err := enc.Encode(data) if err != nil { return nil, err } return buf.Bytes(), nil } // ------------------- // Decode // 用gob进行数据解码 // func Deco...阅读全文

博文 2015-06-17 20:15:55 love_se

Go语言实现Gob编解码

package main import ( "bytes" "encoding/gob" "fmt" ) // -------------------- // Encode // 用gob进行数据编码 // func Encode(data interface{}) ([]byte, error) { buf := bytes.NewBuffer(nil) enc := gob.NewEncoder(buf) err := enc.Encode(data) if err != nil { return nil, err } return buf.Bytes(), nil } // ------------------- // Decode // 用gob进行数据解码 // func Deco...阅读全文

博文 2015-06-17 23:02:23 gzw13999

go解析XML

XML作为一种数据交换和信息传递的格式已经十分普及。而随着Web服务日益广泛的应用, 现在XML在日常的开发工作中也扮演了愈发重要的角色。这一小节, 我们将就Go语言标 准包中的XML相关处理的包进行介绍。 这个小节不会涉及XML规范相关的内容(如需了解相关知识请参考其他文献),而是介绍 如何用Go语言来编解码XML文件相关的知识。 假如你是一名运维人员,你为你所管理的所有服务器生成了如下内容的xml的配置文件: Shanghai_VPN 127.0.0.1 Beijing_VPN 127.0.0.2 // GoTest project main.go package main import ( "encoding...阅读全文

博文 2015-06-17 23:08:17 abao2123

Golang中一个不错的处理 JSON 的库 go-dproxy

图片来自:http://qiita.com/hogedigo/items/f914992baf7a2ed12b9c国庆七天,你是吃多了,还是睡多了?放假七天转眼即逝,接下来的七天可能你又觉得会很漫才。言归正传。Golang 虽然自己就带了 JSON (encoding/json) 处理的库,也有第三方的 simplejson(https://github.com/bitly/go-simplejson) 之类的库,但总是感觉不如Python这样的动态语言方便,在 Python 里,数组和字典的处理都很方便,和 JSON 互转也非常简单。encoding/json 最大的问题是不够灵活,需要预先定义很多的 struct 来进行编解码,这样对于处理结构不定的 JSON 文件非常不方便。这里介绍一...阅读全文

博文 2016-11-05 17:00:00 u012798391

亿级在线系统二三事-网络编程/RPC框架

亿级在线系统二三事-网络编程/RPC框架由于 火丁笔记攻略组 投诉我文章太晦涩,所以后续我们可能把大的主题,拆分成多个系列进行讨论。大的背景是拾忆多年前在360构建的亿级在线的Push/IM系统,把一些经验性和知识性的内容分享给大家。回忆梳理了下,构建一个稳定亿级在线系统,涉及下面四种基本能力,我们后续会分系列进行详细追述~ 今天讨论网络编程中的RPC框架的设计~网络编程RPC框架设计分布式系统设计网络和应用层协议栈的理解(TroubleShooting)客户端实现与策略网络编程/RPC框架设计随着开源技术的活跃,grpc库基本统一了golang分布式系统的rpc框架。近2年很少有团队重新构建自己的rpc库。但你看到的是结果,如果想深入问题本质,真正能够稳定维持和构建一个亿级的实时在线长连接...阅读全文

博文 2019-05-09 10:35:24 火丁笔记

2018年总结

2018年瞬时而过,现总结如下。每月做的事情:一月,教师资格面试二月,过年三月,微信转发统计程序四月,忘记。(需要做月总结)五月,学习消防工程师相关内容六月,学习消防工程师相关内容,提升计划去郑州七月,提升计划去郑州学习,带孩子八月,提升计划去郑州学习,入wish坑九月,wish发布商品并编写相关程序十月,wish发布商品并做自动化发布程序十一月,wish被罚弃坑,计划靠python爬虫挣钱坑大,需要账号,ip资源,入golang坑十二月,编了一个月golang,计划解决淘宝客引流问题,ip资源问题去年计划完成情况:去年未制定计划总之,今年理想很多,行动很饱满,现实是没有一个做成的,很失败。自己不断的入坑,弃坑。是自己没有制定2018年计划的原因吗?是一方面,明显今年没有目标,行动比较散乱。...阅读全文

博文 2019-01-02 18:34:47 勇勇_cf62

详解varint编码原理

什么是Varint编码 Varint是一种使用一个或多个字节序列化整数的方法,会把整数编码为变长字节。对于32位整型数据经过Varint编码后需要1~5个字节,小的数字使用1个byte,大的数字使用5个bytes。64位整型数据编码后占用1~10个字节。在实际场景中小数字的使用率远远多于大数字,因此通过Varint编码对于大部分场景都可以起到很好的压缩效果。 编码原理 除了最后一个字节外,varint编码中的每个字节都设置了最高有效位(most significant bit - msb)–msb为1则表明后面的字节还是属于当前数据的,如果是0那么这是当前数据的最后一个字节数据。每个字节的低7位用于以7位为一组存储数字的二进制补码表示,最低有效组在前,或者叫最低有效字节在前。这表明varin...阅读全文

博文 2019-09-26 14:35:47 kevinyan

Go之URL Query String编码器和解码器

### 项目地址 https://github.com/hetiansu5/urlquery ### 简介 使用Go语言实现的URL Query字符串编码器和解码器 - 将URL Query编码的字符串转换为Go数据结构 - 将Go数据结构转换为URL Query编码的字符串 ### 特性 - 支持丰富的Go数据结构互转: - 基础数据类型: 有符号整型[8,16,32,64] 无符号整形[8,16,32,64] 字符串 布尔值 浮点型[32,64] 字节 字面量 - 复合数据类型: 数组 切片 哈希 结构体 - 嵌套结构体 - 支持顶层的数据结构为数组 切片 哈希,不仅仅是结构体 - 支持自定义的URL-Encode编码规则,支持全局、局部设置方式,支持默认规则 - 支持自定义的键名映射规...阅读全文

博文 2020-01-10 00:53:21 tinson

go-ethereum源码分析(1) -- 交易、区块、区块链

前言这段时间一直在做区块链公链项目开发,主要是基于bitcoin-core源码进行开发,理解区块链原理及基础概念;个人同时对于以太坊也感兴趣,所以准备拿go-ethereum学习一番,过程会持续几个月,这里把学习笔记记录下来;本人现在对ethereum也是菜鸟小白,这篇文章主要是针对go-ethereum小白,大牛就请绕过吧。现在开始吧区块链基本概念:交易、区块、区块链,是区块链中的核心基础,今天就从这几个概念入手分析吧。(这里忍不住多说几句,任何科学领域基础概念真的很重要,工作中遇到的很多问题都是因为基本概念理解不到位,解决问题时需要把基本概念重新理解一遍;依然记得若干年之前南京大学徐家福教授的演讲,一位同学问怎么才能学好计算机,徐教授什么话也没说,拿起粉笔在黑板上颤抖着手写到:“基础概念...阅读全文

博文 2018-07-09 21:34:41 Daemon_Shell

grpc-go编解码器使用说明

[TOC] 参考资料: gRPC 官方文档中文版 V1.0 1. 利用protobuf生成文件 1.1 service.proto syntax = "proto3"; // The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} } // The request message containing the user's name. message HelloRequest { string name = 1; } // The response message containing the greet...阅读全文

博文 2018-12-19 11:34:48 代号孤狼

利用guardian为你的api应用写测试

要写出一个健壮的程序必须要有测试,测试可以保证上线的代码功能符合预期,防止上线后出现莫须有的损失。对于我们一口气写完的api,匆忙上线往往会导致很糟糕的后果。 那么怎么去写测试来保证我们的api上线后是没问题且符合预期的呢?一个后台工程师为了不背锅,如何去需要保证自己的工作完成得没问题呢? 注意:我们这里讨论的是api符合预期,对于客户端ui显示,不在我们讨论范围内。 我觉得要做好api测试,至少有以下三点: 测试案例的返回结果符合预期 测试案例覆盖了所有代码条件 测试案例的结果数据符合预期 简单的说就是,充分理解业务的情况下,编写出完整的测试案例集,然后通过测试案例集验证了返回结果以及存储数据的准确性。这就是保证api正确的核心。 根据这样的想法,于是编写了一个测试框架 Guardian。...阅读全文

博文 2018-10-09 12:34:38 honhon

cosmos tendermint irisnet 的amino编解码解析

# amino编解码,加解密 --- ## amino编解码 amino编解码可以称之为protobuf3的一次升级,再protobuf3的基础上添加了对`interface`的直接支持,也就说:可以直接把序列化好的数据unmarshal到一个接口对象中,但是这需要把定义的`interface`和实现`interface`的对象事前注册到amino的编解码对象中。具体例子如下: ``` cdc := amino.NewCodec() cdc.RegisterInterface((*MyInterface1)(nil), nil) cdc.RegisterInterface((*MyInterface2)(nil), nil) cdc.RegisterConcrete(MyStruct1{},...阅读全文

博文 2019-07-02 12:32:14 elvindu

Golang Gob编码

gob是Golang包自带的一个数据结构序列化的编码/解码工具。编码使用Encoder,解码使用Decoder。一种典型的应用场景就是RPC(remote procedure calls)。 gob和json的pack之类的方法一样,由发送端使用Encoder对数据结构进行编码。在接收端收到消息之后,接收端使用Decoder将序列化的数据变化成本地变量。 有一点需要注意, 发送方的结构和接受方的结构并不需要完全一致 结构体中缺省的字段将不会被发送。而且在接收方,并不需要所有的字段都要有对应的结构属性对应。godoc中的这个例子很形象: 当发送方传递的是struct{A, B int}结构的值的时候,接收方可以允许前9种结构,但是后面4种结构确实不允许的。 个人觉得这种设定是很符合逻辑的:接收...阅读全文

博文 2018-02-03 22:33:04 coder_kev

Go是如何实现protobuf的编解码的(1):原理

文链接:https://mp.weixin.qq.com/s/O8... 这是一篇姊妹篇文章,浅析一下Go是如何实现protobuf编解码的: Go是如何实现protobuf的编解码的(1): 原理 Go是如何实现protobuf的编解码的(2): 源码 本编是第一篇。 Protocol Buffers介绍 Protocol buffers缩写为protobuf,是由Google创造的一种用于序列化的标记语言,项目Github仓库:https://github.com/protocolbu...。 Protobuf主要用于不同的编程语言的协作RPC场景下,定义需要序列化的数据格式。Protobuf本质上仅仅是一种用于交互的结构式定义,从功能上和XML、JSON等各种其他的交互形式都并无本质不...阅读全文

golang与protobuf整合(应用)

安装 在go中使用protobuf,有两个可选用的包goprotobuf(go官方出品)和gogoprotobuf。 gogoprotobuf完全兼容google protobuf,它生成的代码质量和编解码性能均比goprotobuf高一些 安装protoc 首先去下载protobuf的编译器protoc ,windows上可以直接下到exe文件(linux则需要编译),最后将下载好的可执行文件拷贝到GOPATH的bin目录下(GOPATH/bin目录最好添加到系统环境变量里) 安装protobuf库文件 go get github.com/golang/protobuf/proto goprotobuf 安装插件 go get github.com/golang/protobuf/prot...阅读全文

博文 2018-12-14 17:34:42 神奇的考拉