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

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 凉初透的风

golang emoji表情处理

package util import ( "regexp" "strconv" "strings" ) //表情解码 func UnicodeEmojiDecode(s string) string { //emoji表情的数据表达式 re := regexp.MustCompile("\\[[\\\\u0-9a-zA-Z]+\\]") //提取emoji数据表达式 reg := regexp.MustCompile("\\[\\\\u|]") src := re.FindAllString(s, -1) for i := 0; i < len(src); i++ { e := reg.ReplaceAllString(src[i], "") p, err := strconv.Parse...阅读全文

博文 2017-02-09 17:35:13 赵世亮

网易云音乐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

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

【go】json数据解码的两种方法NewDecoder与Unmarshal

golang中处理http响应数据解码,一般有两种方式 json.Unmarshal进行解码 func HandleUse(w http.ResponseWriter, r *http.Request) { var u Use data, err := ioutil.ReadAll(r.Body) if err != nil { w.WriteHeader(http.StatusBadRequest) return } if err := json.Unmarshal(data, &u); err != nil { w.WriteHeader(http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) fmt.F...阅读全文

博文 2020-04-14 13:32:43 dongzaidong

安全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语言的gob简单使用

编码结构体: package main import ( "encoding/gob" "fmt" "os" ) func main() { info := map[string]string{ "name": "xichen", "age": "24", } name := "test.gob" File, _ := os.OpenFile(name, os.O_RDWR|os.O_CREATE, 0777) defer File.Close() enc := gob.NewEncoder(File) if err := enc.Encode(info); err != nil { fmt.Println(err) } } 解码结构体: package main import ( "enc...阅读全文

博文 2015-10-23 19:00:36 fyxichen

兄弟连区块链培训分享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

Go获取当前执行路径及图片的加解码

// imagecode.go package main import ( "bytes" "fmt" "os/exec" "path/filepath" "strings" "image" "image/jpeg" "io/ioutil" "os" ) func main() { //读取一张图片,ff为[]byte类型 ff, _ := ioutil.ReadFile("image1.jpg") //把ff写入文件中 _ = ioutil.WriteFile("./output.jpg.txt", ff, 0666) //新建一个缓存 bbb := bytes.NewBuffer(ff) //对byte进行解码 m, _, _ := image.Decode(bbb) //新建一个文件 ...阅读全文

博文 2015-11-01 21:00:06 qq_534019165

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...阅读全文

Golang 之 Base62 编码

Base62 编码用62个可见字符来编码信息,也就是所谓的62进制,可用于缩短地址之类的。实现起来也很简单。当然,这个实现跟别人家的有可能不一样,反正自己能编能解就行。 package main import ( "math" "strings" ) const CODE62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" const CODE_LENTH = 62 var EDOC = map[string]int{"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"a":10,"b":11,"c":12,"d":13,"e":14,"...阅读全文

博文 2016-08-03 13:00:00 qufo

Golang、python中MD5、SHA512、base64编码等

在GO中处理的话,比较方便。 func main() { fmt.Println(md5Str("woGo")) fmt.Println(sha512Str("woGo")) fmt.Println(base64DecodeStr(base64EncodeStr("fd"))) } //md5验证 func md5Str(src string) string { h := md5.New() h.Write([]byte(src)) // 需要加密的字符串为 //fmt.Printf("%s\n", hex.EncodeToString(h.Sum(nil))) // 输出加密结果 return hex.EncodeToString(h.Sum(nil)) } //sha512验证 func...阅读全文

博文 2017-03-15 19:00:20 大洋的顶端

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 json解码的坑

go语言中有个大坑,那就json反序列化的坑。下面的代码给出示例和解决办法: package main import ( "bytes" "log" "time" "github.com/json-iterator/go" ) type Info struct { Id int } func Log(format string, args ...interface{}) { log.Printf(format+"\n", args...) } func main() { log.SetFlags(log.Ldate | log.Lshortfile) // m := make(map[string]interface{}) i := Info{ Id: int(time.Now().Unix...阅读全文

博文 2019-06-08 15:32:39 golang推广大使

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

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

protobuf测试gofast

安装protoc go get github.com/golang/protobuf/protogoprotobuf安装插件 go get github.com/golang/protobuf/protoc-gen-go生成go文件 protoc --go_out=. *.proto gogoprotobuf安装插件 gogoprotobuf有两个插件可以使用protoc-gen-gogo:和protoc-gen-go生成的文件差不多,性能也几乎一样(稍微快一点点)protoc-gen-gofast:生成的文件更复杂,性能也更高(快5-7倍) //gogogo get github.com/gogo/protobuf/protoc-gen-gogo//gofastgo get github....阅读全文

博文 2019-08-17 08:32:43 罐头过期

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 火丁笔记

goLang gob 编码

package main import ( "bytes" "encoding/gob" "log" ) func main() { var str string = "xiaochuan" e, err := Encode(str) if err != nil { log.Println(err.Error()) } log.Println(string(e)) info_new := new(string) err1 := Decode(e, info_new) if err1 != nil { log.Println(err1.Error()) } log.Println(*info_new) } // 用gob进行数据编码 func Encode(data interface{}) ...阅读全文

博文 2016-10-25 06:00:03 liangguangchuan

Golang解析json数据之延迟解码

RawMessage类型 encoding/json的库中有这样一个类型: RawMessage类型是一个保持原本编码的json对象。本类型实现了Marshaler和Unmarshaler接口,用于延迟json的解码或者预计算json的编码。 实际工作中,我们可能会遇到类型这种的json数据: package main import "encoding/json" // jsonText comes from http://json.org/example.html var jsonText = []byte(` { "glossary":{ "title":"example glossary", "GlossDiv":{ "title":"S", "GlossList":{ "GlossE...阅读全文

博文 2018-04-18 11:33:06 90design

详解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

编码在线工具

1 背景 作为一名程序员,每天需要处理大量编码问题,经常会用到在线json处理、编码解码、SQL处理等等,但是目前没有一个没有bug而且一站式解决所有问题的网站。导致我每天需要不同网站来回切换,而且遇到解析bug就非常头疼。 2 目标 打造一个一站式辅助编程的在线处理网站 3 网站风格 网址https://www.codeutils.top,打开后如下所示: 网站风格 左侧为目前网站支持的处理能力,目前包括Json处理、SQL处理、字符串编码解码、Go语言工具。 4 网站特点 4.1处理流程支持链式处理,效果如下: 链式处理 4.2 全屏显示,效果如下: 全屏显示 4.3 内容编辑器采用强大的CodeMirror,支持折叠和语法高亮等功能,效果如下所示: 内容折叠 5 目前支持的处理方法 5...阅读全文

博文 2019-12-08 01:32:59 zhongxuqi

Golang学习(15)——Unicode utf16包

Golang学习 - unicode/utf16 包----------------------------// IsSurrogate 判断 r 是否为代理区字符// 两个代理区字符可以用来组合成一个 utf16 编码func IsSurrogate(r rune) bool// EncodeRune 将字符 r 编码成 UTF-16 代理对// r:要编码的字符// 如果 r < 0x10000 ,则无需编码,其 UTF-16 序列就是其自身// r1:编码后的 UTF-16 代理对的高位码元// r2:编码后的 UTF-16 代理对的低位码元// 如果 r 不是有效的 Unicode 字符,或者是代理区字符,或者无需编码// 则返回 U+FFFD, U+FFFDfunc EncodeR...阅读全文

博文 2017-02-10 10:20:28 1160636144

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 代号孤狼

Go语言标准库Json的使用.

GitHub上别人做的封装,挺好用的,推荐一下:https://github.com/bitly/go-simplejson 这个内置的标准库用起来还是很烦得,要知道对方发过来的type,不然只能自己分析反射. package main import ( "encoding/json" "fmt" ) type Status_slice [][]int type Info struct { IP string Block Status_slice } func main() { var x Status_slice = [][]int{{1, 2}, {2, 3}} var y Info = Info{"192.168.1.248", x} fmt.Println(y) b, e := js...阅读全文

博文 2015-06-17 23:05:58 fyxichen

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