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

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 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语言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 -- 网络字节编解码(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语言笔记: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

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 赵世亮

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

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

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 徐学良

介绍一下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和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

安全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中已将“%”号用作通...阅读全文

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元嘉

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使用protobuf

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

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

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 大洋的顶端

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

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

零拷贝读取文件成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

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

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

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

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中的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

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

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

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 的库 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

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

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

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

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

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

Go 的高级编码和解码技术 【已翻译100%】

高级编码和解码技术 Go 的标准库包含了一些很不错的编码和解码包,里面涵盖了大量的编码方案。一切数据,不管是CSV,XML,JSON,还是 gob —— 一个 Go 特定的编码格式,都涵盖在内,并且,这些包都非常容易上手使用。 事实上,它们中的大多数都不需要再添加任何代码,你只需插入数据,它就会输出编码后的数据。 不过,并不是所有的应用程序都乐于处理这种到 JSON 展现的一对一映射。Struct 标记可以涵盖一些场景中的大多数情况,但如果你使用了很多 API,它的功能还是有限。 例如,你可能会遇到一个 API,它会输出不同的对象到同一个键,使其成为泛型的首选后补对象,但是 Go 并没有这些东西。或者你也可能会使用一个 API,它可以接收并且返回 Unix 时间 而不是 RFC 3339 格...阅读全文

博文 2017-06-06 12:33:49 Viyi,Viyi无若,无若总长,总长leoxu,leoxu边城,边城heiing,heiing奔跑的蛮牛奔跑的蛮牛

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

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

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

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

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

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

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

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

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

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

GO JsonStr 2 obj

//project main.go package main import ( "encoding/json" "fmt" ) func main() { fmt.Println(help()) b := []byte(`{ "Title": "Go语言编程", "Authors": ["XuShiwei", "HughLv", "Pandaman", "GuaguaSong", "HanTuo", "BertYuan", "XuDaoli"], "Publisher": "ituring.com.cn", "IsPublished": true, "Price": 9.99, "Sales": 1000000 }`) var r interface{} err := json.Unmars...阅读全文

博文 2017-05-10 12:00:47 痞子汤

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 神奇的考拉

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

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

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

Go JSON 技巧

相对于很多的语言来说, Go 的 JSON 解析可谓简单至极. 问题 通常情况下, 我们在 Go 中经常这样进行 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":{ "GlossEntry":{ "ID":"SGML", "SortAs":"SGML", "GlossTerm":"Standard Generalized Markup La...阅读全文

博文 2018-02-22 22:47:30 lingchao

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

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