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

2019-05-04 后端开发为什么使用rpc

作为后端开发, 你是否有考虑过这个问题:明明已经有http+restful api + json了,为什么还要上各种rpc框架? 举个简单的例子,以查户口为例: http + json的形式: 我们写一个http server, 就提供一个接口 GET /persion ,然后返回 20150827163347625.jpeg ··· { "name":"xiaoerhei", "age": "28" } grpc+pb(非常不准确的格式,意会即可): name|xiaoerhei|age|28 少了很无用的http头 少了json很多无用的分隔符 pb序列化和反序列化的性能比比json高很多 在树莓派上做了简单的对比测试, golang + grpc + pb的方式 比 golang + ...阅读全文

博文 2019-05-05 07:34:54 王小二黑

求 JSON 2个函数

~~~ 求下面的代码 有问题, 我需要 一个转换JSON 一个反序列化到MAP 方便修改值,思路这样的 比如生成JSON值 var a map[string]interface{} a["code"]="100" a["msg"]="ok" result := JSON_Serialize(a) //这样result得到一串JSON值了 ================ 反序列化 从数据库或则字符串获取得到一串JSON值 bb := `{"Code":"-1","Msg":"code error!"}` result2 :=JSON_Deserialize(bb) //然后修改一些值 修改完毕再转换JSON即可 result2["Code"]=="200" ...阅读全文

golang 如何使用模版?

package main import ( "fmt" "net/http" "log" "html/template" ) func main () { //实例化一个 HTTP app := http.NewServeMux(); app.HandleFunc("/",func(w http.ResponseWriter,r *http.Request){ switch r.Method { case "GET": tmpl,_ := template.ParseFiles("./View/home.html"); tmpl.Execute(w,"Master"); case "POST": case "PUT": case "DELETE": default: } }); addres...阅读全文

博文 2018-06-02 16:30:01 cheungxiongwei

2018-10-23 FreeWheel业务系统微服务化过程经验分享

载: https://mp.weixin.qq.com/s/JgNgmYasXaTqrx5OeeD5KQ 2016 年下半年开始,FreeWheel 开始将其业务系统从 Rails 单体应用逐步迁移到微服务,同时技术栈从 Rails 改为 Golang,两年之后,整个迁移接近尾声,FreeWheel 业务系统技术团队对外分享了它们在微服务化过程中的经验。 原有架构的问题 FreeWheel 是一家为客户提供数字视频广告管理技术和服务的公司。其业务端产品需要对接客户,提供视频广告投放优化界面,类似于 Web ERP,该业务系统采用 Rails 技术栈开发,其架构是一个典型的三层架构。 image 这个系统经过近十年的研发和迭代,代码量达到数十万行,业务的特殊性和代码的复杂度让团队的维护和新功能...阅读全文

博文 2018-10-23 14:34:45 四火流年

Golang 初体验

我最近决定在一个新项目中使用 GoLang 来实现一组增删改查的 API。在此之前,我较为熟悉 Java,Groovy,了解一些 Python。 我大部分的经验都是使用 Java 或者 Groovy 加上 Spring Boot。这让我感到有些无聊,所以为什么不来学点儿东西找找乐子呢? ## 要求 以下是一些要求。 * 设计并实现领域数据模型 * 实现增删改查 API * 在后端使用 Mongo 数据库 * 必须有 Swagger 文档 API 定义并且能方便的用多种语言生成客户端 * 运行在 Docker 容器中 * 能被部署在 Kubernetes 中 ## 非功能性要求 * 需要能很容易的调用其它语言的 API * 需要能够快速迭代(可能要突破常规) * 必须有单元测试 ## 加分项 ...阅读全文

博文 2019-10-15 11:38:15 Ollyder

3年Java工程师面试必问!这些题一定要会!

#### 前言 要说面试,程序员烦,公司也烦,面试官也烦,但没办法,鱼龙混杂的人太多,理论好写不了代码的程序员着实让公司头疼,因而面试的题目也越来越刁钻! 不过凡事都有两面性,面试也是激励程序员多看面试题,掌握知识不是吗? 以下推荐的Java面试题目,希望可以帮大家积累面试经验温习技术知识! ![](https://upload-images.jianshu.io/upload_images/11633898-883eeb37234f0512.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) **【文章福利】小编为大家准备了一些常见的的面试题,总结给大家,大家可以试试,希望对大家能有所帮助。需要的可以加小编QQ群937053620...阅读全文

博文 2019-01-13 18:54:39 _pangzi

Go语言小贴士2 - 协议解析

今天这个小贴士主要介绍协议解析的一些知识,Go语言作为服务端编程语言,免不了要涉及到通讯协议解析,即便不是做网络通讯,也难免会涉及到文件解析,其实它们的知识点都是一样的。 现实应用场景中,通讯协议按通常可以分为两类:二进制协议和文本协议。Go语言内置的gob格式就是一种二进制协议,而JSON、XML等则是文本协议。 假设我们要发送123这个数值,用二进制协议只需要一个字节,因为一个字节(byte)有8个二进制位(bit),2的8次方是256,一个字节可以表达0-255之间的任意值,共256种可能性。 如果我们用文本协议发送123这个数值,则需要至少三个字节,因为123这个数字需要转换成字符'1'、'2'、'3'这三个ASCII字符,存入三个字节中。 所以同样一个数据,用二进制协议表达的体积通...阅读全文

博文 2017-02-10 16:35:27 达达

浅谈服务可观察性的三个指标

当论及可观察性时,不同的人往往会给予不同的反应。 更多的人会反问:什么是可观察性? 如何定义可观察性? 如果说服务的可观察性不容易定义,那么我们可以换个词来类比: 可视化, 即如何做到服务的可视化? 再讨论服务可视化之前,我们先来看看它的近亲:数据可视化。 每当论及数据可视化时,业界会有一些成熟的可视化模型来供我们落地使用。对这些模型进行抽象以后,我们可以发现,数据可视化的核心在于: 数据。 展现模型 数据,指的是大量的,具备有效业务含义的数据。 这些数据可以是固定的(例如一次请求所产生的数据)或者是源源不断的数据(例如代码产生的日志数据,用户的请求数据)。并且这些数据是可以允许进行计算的(例如对用户IP数据进行聚合运算可以得出用户分布图,而对日志数据中出现的字符进行聚合运算则没有多少意义)...阅读全文

博文 2020-03-30 23:33:24 易企秀工程师

密码学系列 - 签名

签名是用于消息的认证,保证该条消息不被伪造。本文主要讨论RSA签名、DSA、ECDSA 和 Schnorr 签名算法。 RSA签名 安全性建立在大数分解问题 公钥:E、N 私钥:D、N 签名:签名 = 消息^D mod N 验证:消息' = 签名^E mod N ,如果消息'==消息则验证成功 DSA 由NIST(美国国家标准技术研究所)1991年制定的数字签名技术规范,是Schnorr算法的变体。 安全性建立在离散对数问题 密钥生成(1024bits): 生成素数 p, 找到 p-1 的一个素数 q,且 找到 ord(a)=q 的元素 a,a 生成了拥有 q 个元素的子群 生成随机数,0 < d < q b = mod p 则密钥对为: = (p,q,a,b), = (d) 签名生成: 随...阅读全文

博文 2019-10-28 19:32:47 aside section._1OhGeD

go实现区块链[2]-整合默克尔树+POW

添加merkleRootmerkleTree.go1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162package mainimport "crypto/sha256"//默克尔树节点type MerkleTree struct{ RootNode *MerkleNode}//默克尔根节点type MerkleNode struct{ Left *MerkleNode Right *MerkleNode Data []byte}//生成默克尔树中的节点,如果是叶子节点,则Left,right为nil ,如果为非叶子...阅读全文

博文 2018-12-20 00:35:12 jonson_jackson

【TokenGazer深度研究】Aergo:企业级公链落地尚未明朗,项目信息披露不全建议跟进观察

本期项目:Aergo1. AERGO试图融合公链和私链去更好的满足企业级用户的需求。团队技术人员大多有区块链项目开发经验,但目前负责商业拓展、市场运营的人员较少。2. 项目的“背书”公司Blocko有4年的区块链行业经验,其产品Coinstack已经有商业应用。AERGO的核心技术基于Coinstack,预计Blocko公司会为AERGO项目提供大量资源支持。3. 项目粉丝热度较高。4. AERGO代币作为平台内的应用型代币,其需求将随着平台的使用规模而增加,因此代币的长期投资价值需要考虑未来生态建设情况。5. 项目尚未发布官方Github主页或MVP(最简化可实行产品)。白皮书的部分技术细节需要团队公布更多资料协助进一步理解。行业背景现实世界中的应用开发需要考虑计算、存储、外部数据、变现、...阅读全文

博文 2018-08-14 15:35:20 TokenGazer

Golang packge time

time 包的官方文档 中文 英文 本文章不是对time包文档的重复,旨在加深对time实现的理解上,以上是文档可以进行查看。 time 包中一些官方定义的结构的认识 go针对时间常量的定义: const ( Nanosecond Duration = 1 //纳秒 Microsecond = 1000 * Nanosecond //微秒 Millisecond = 1000 * Microsecond // 毫秒 Second = 1000 * Millisecond // 秒 Minute = 60 * Second // 分 Hour = 60 * Minute // 时 ) type Weekday int // 定义星期 const ( Sunday Weekday = iota ...阅读全文

博文 2019-02-21 19:34:45 _AlphaBaby_

使用golang反向代理统计api访问次数

前言 今天写点有趣的小东西。事情是这样的,我经常看到有些软件加了统计数据的sdk,之后就可以实现统计接口的访问量,接口负载等等数据。而这些功能不需要原有的软件做些什么,对原来的业务完全无***,我觉得这样的功能很有实用性,所以没有参考其他类似的软件或者工具,我想自己试试怎么实现这样的功能。 思路 首先,我们先给要做的工具起个名字,就叫monitor。要实现无侵入,那么只能是在业务软件外面套一层,经由业务软件的流量,都需要经过monitor这一层,这让人很容易得想到了网关的功能也是类似的。恰好,golang实现反向代理十分简单。所以,思路就有了。先实现一个反向代理,将经由业务的流量都由monitor反向代理给业务软件。接着,将访问的api放进通道中,对api进行分类,就可以统计api的访问量了...阅读全文

博文 2020-03-15 22:33:47 wx5e1abbbb0a5e5

go语言实现自己的RPC:go rpc codec

前言 RPC是远程过程调用(Remote Procedure Call)的简称,通过RPC我们可以像调用本地方法一样调用位于其他位置的函数。大家更常见的可能是HTTP API调用,简单来对比的话,RPC比起HTTP调用封装更完善,调用者不必手动处理序列化和反序列化,使用成本更低一些(虽然学习成本可能会更高)。 出于学习目的,这次的目标是使用go语言来实现一个自己的RPC。在现实世界里,对于一个RPC工具,除了方法调用以外,人们更看重的是其他功能比如服务发现、负载均衡、熔断降级之类的功能,这里暂时不会涉及,而是仅关注实现一个可以工作的方法调用。 在之前的文章里大致了解了go语言自带的rpc框架,其中就提到go rpc预留了codec接口,可以让用户在go rpc使用自己的序列化协议,这次就尝试...阅读全文

博文 2019-03-02 17:37:12 掘金

Golang 基础 JSON

本篇只是自己学习过程中的一个记录 首先需要引入json包 import "encoding/json" 这里我们先定义一个用于序列化和反序列化的结构用于测试。 type TTest struct { Path string `json:"path"` Val int `json:"val"` } 序列化 test := &TTest{"C:\\abc\\123", 11111} b, err := json.Marshal(test) if err != nil { fmt.Println(err) return } fmt.Println(string(b)) 成功后输出:{"path":"C:\abc\123","val":11111} 反序列化 var test TTest json....阅读全文

博文 2017-11-17 22:03:21 不在乎y

Golang-reflect反射的实际中的应用及畅想

1. ???? 解决了什么 原文https://mojotv.cn/go/golang-reflect-string 我有很多行日志数据单行的格式是这样的 HOST;000012000629948340196501;ipv4;3; ips: user_id=2;user_name=172.21.1.102;policy_id=1;src_mac=52:54:00:62:7f:4a;dst_mac=58:69:6c:7b:fa:e7;src_ip=172.21.1.102;dst_ip=172.22.2.3;src_port=48612;dst_port=80;app_name=网页浏览(HTTP);protocol=TCP;app_protocol=HTTP;event_id=1310909...阅读全文

博文 2020-01-14 18:32:39 TechMojotv

XML刚学会,怎么又出来个YAML!

XML(eXtensible Markup Language)可扩展标记语言,曾经是IT软件开发界,标记数据、定义数据的大哥大。 很多从事Spring的同学,没少花时间在写XML文件上吧? 不过随着时间推移,XML的大哥大地位越来愈多收到了挑战。 这不,除了JSON,又冒出来一个YAML。到底YAML是个怎么回事?看看下面的文章,小伙伴们就明白了。YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans(某软件行业大牛)在2001年首次发表了这种语言。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语...阅读全文

区块链之 RLP序列化

rlp序列化文档 RLP(Recursive Length Prefix,递归的长度前缀)是一种编码规则,可用于编码任意嵌套的二进制数据,特定的数据类型(例如:string,int等类型)则交给更高阶的协议处理。需要注意的是:int类型必须去掉首部0,且必须用大端模式表示。 编解码规则 编码规则 如果数据的长度是1个字节,并且它的值在[0x00, 0x7f] 范围之间,那么其RLP编码就是数据本身。即前缀为空,用前缀代表数据本身; 如果数据的长度是0-55字节,其RLP编码是前缀跟上(拼接)数据本身,前缀的值是0x80加上数据的长度。由于在该规则下,数据的最大长度是55,因此前缀的最大值是0x80+55=0xb7,所以在本规则下前缀(第一个字节)的取值范围是[0x80, 0xb7]; 如果数...阅读全文

博文 2020-04-23 10:32:55 孤独_漂流

网络游戏中玩家数据的处理

背景 网络游戏中最重要的数据莫过于玩家在游戏的过程中产生的数据。 可以简单的分成两类: 存档数据 过程记录数据 第一类数据主要是类似角色『基础』信息,背包、技能、任务,以及所有(或者部分)玩家共有的王国、地图、联盟等信息。第二类主要是类似『日志』信息一样的,比如「某个地方某角色使用了某道具」这样的操作记录。 这篇文章中我们主要讨论第一种数据的处理,关于后一种用作记录和分析的数据,可能会在后面写一个专门的Blog介绍。 存储结构 首先我们需要决定数据的形态,和描述的方法。这里有一个选择:以『条目格式』为核心,还是以『文档格式』为核心。 『条目格式』的优点:看起来较为平坦,方便实时落地,和各种数据库存储模式搭配方便,外部工具修改方便,便于批量处理。『文档格式』的有点:通常是树形结构,和大部分脑中...阅读全文

博文 2019-09-03 17:32:48 秦川

兄弟连区块链教程Fabric1.0源代码分析Chaincode(链码)体系总结

兄弟连区块链教程Fabric1.0源代码分析Chaincode(链码)体系总结,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。# Fabric 1.0源代码笔记 之 Chaincode(链码)## 1、Chaincode概述Chaincode,即链码或智能合约,代码分布在protos/peer目录、core/chaincode和core/common/ccprovider目录,目录结构如下:* protos/peer目录: * chaincode.pb.go,ChaincodeDeploymentSpec、ChaincodeInvocationSpec结构体定...阅读全文

博文 2018-10-30 05:34:42 兄弟连区块链培训

golang-区块链学习03永久存储

前言 前面两篇简单的实现了区块链的创建和工作量证明,但是都是在内存中进行的。实际的区块链应该是可以永久存储的,这样才有意义。下面开始做永久性区块链存储。 知识点 1、github项目引用 2、github.com/boltdb/bolt项目的简单使用 3、命令行使用 4、go常用的数据转换 golang-区块链永久性存储 1、创建区块链 方法:func NewBlockChain() *BlockChain // 创建区块链 // 返回一个区块链实例 func NewBlockChain() *BlockChain { var tip []byte // 打开存储区块链的文件blockchian.db、不存在则创建 db, err := bolt.Open(dbFile, 0600, nil...阅读全文

博文 2018-08-15 01:34:56 embedsky

golang 时间处理

时区 // 代表一个纳秒精度的时间点 var t time.Time; // 返回当前时间 t = time.Now(); // 时区 fmt.Printf("%v\n", t); // 返回反回所在时区 fmt.Printf("%v\n", t.Location()); // 返回UTC时间和UTC时区 fmt.Printf("%v %v\n", t.UTC(), t.UTC().Location()); // 同上,In()返回指定时区的时间 fmt.Printf("%v %v\n", t.In(time.UTC), t.In(time.UTC).Location()); // 返回当地时区的时间 fmt.Printf("%v %v\n", t.Local(), t.Local().Lo...阅读全文

博文 2019-07-11 19:32:39 战神悟空

Protobuf 终极教程 Go语言版

目录 [−] 历史序列化proto教程proto3的改变一个简单的例子proto3 格式版本定义引入其它proto文件packageoption普通字段Oneofmap类型Reserved枚举类型使用其它类型嵌套类型未知类型Any更新消息类型其它Well-Known类型编码gogo库 Protocol Buffer (简称Protobuf) 是Google出品的性能优异、跨语言、跨平台的序列化库。 历史 2001年初,Protobuf首先在Google内部创建, 我们把它称之为 proto1,一直以来在Google的内部使用,其中也不断的演化,根据使用者的需求也添加很多新的功能,一些内部库依赖它。几乎每个Google的开发者都会使用到它。 Google开始开源它的内部项目时,因为依赖的关系,...阅读全文

博文 2019-11-10 00:02:15 smallnest

Go语言5-结构体

结构体 Go中的结构体(就相当于其它语言里的class): 用来定义复杂的数据结构 可以包含多个字段(属性) 结构体类型可以定义方法,注意和函数的区分 结构体是值类型 结构体可以嵌套 Go语言没有class类型,只有struct类型 定义结构体 struct 声明: type (标识符) struct { field1 type field2 type } 例子: type Student struct { Name string Age int Score int } 结构体中字段的访问,和其他语言一样,使用点: package main import "fmt" type Student struct { Name string Age int Score int } func main...阅读全文

博文 2018-11-02 13:35:14 骑士救兵

高效生成JSON串——json-gen

概述 游戏服务端的很多操作(包括玩家的和非玩家的)需要传给公司中台收集汇总,根据运营的需求分析数据。中台那边要求传过去的数据为 JSON 格式。一开始我们使用 golang 标准库中的encoding/json,发现性能不够理想(因为序列化使用了反射,涉及多次内存分配)。由于数据原始格式都是map[string]interface{},且需要自己一个字段一个字段构造,于是我想可以在构造过程中就计算出最终 JSON 串的长度,那么就只需要一次内存分配了。 使用 下载: $ go get github.com/darjun/json-gen 导入: import ( jsongen "github.com/darjun/json-gen" ) 使用起来还是比较方便的: m := jsongen....阅读全文

二)golang工厂模式

在通用的工厂模式中,一般涉及到 简单工厂模式(顾名思义:工厂 > 创建)、工厂方法(顾名思义:将方法工厂化)、抽象工厂模式(顾名思义:将工厂抽象化 工厂 > 工厂 > 创建) 特点:将接口与具体实现分离,根据需要实例化对象使用场景:日志记录,文件服务平台,数据库访问 1.定义产品接口 type P interface {} 2.定义实现结构 type P1 struct {} //implement P type P2 struct {} //implement P ...//简单3.工厂方法(简单工厂完) func F (name string) P {} //抽象3.工厂接口,用于生产工厂 type Factory interface { CreateP(name string) Cre...阅读全文

golang相关网摘

1、golang开发50个坑 http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/index.html#mline_lit_comma 2、golang二进制序列化与内存对齐 https://www.zhihu.com/question/27410178 3、大话设计模式(golang) http://www.oschina.net/code/list_by_user?id=1469272 4、effective go http://www.hellogcc.org/effective_go.html 5、深入go网络库 http://skoo.me/go/2014/04/21/go-net-core...阅读全文

博文 2017-12-21 16:00:00 cqvoip

go实现区块链[1]-block

12345678910111213141516171819202122232425262728293031323334353637383940414243444546//定义区块结构体type Block struct{ Version int32 PrevBlockHash []byte Merkleroot []byte Hash []byte Time int32 Bits int32 Nonce int32}//序列化func (b* Block) Serialize() []byte{ var encoded bytes.Buffer enc:= gob.NewEncoder(&encoded) err:= enc.Encode(b) if err!=nil{ log.Panic(...阅读全文

博文 2018-12-20 00:35:12 jonson_jackson

Golang json

一、官方库编码解码 type Movie struct { Title string Year int `json:"released"` Color bool `json:"color,omitempty"` Actors []string } var movies = []Movie{ {Title: "Casablanca", Year: 1942, Color: false, Actors: []string{"Humphrey Bogart", "Ingrid Bergman"}}, {Title: "Cool Hand Luke", Year: 1967, Color: true, Actors: []string{"Paul Newman"}}, {Title: "Bullit...阅读全文

博文 2019-03-13 08:34:40 懒皮

golang利用gob序列化struct对象保存到本地

golang可以通过json或gob来序列化struct对象,虽然json的序列化更为通用,但利用gob编码可以 实现json所不能支持的struct的方法序列化,利用gob包序列化struct保存到本地也十分简单. gob包实现的序列化struct对象保存到本地 务必注意的是golang序列化有个小坑,就是struct里的字段必须要可导出也就是首字母大写 package main import ( "encoding/gob" "fmt" "os" ) type User struct { Id int Name string } func (this *User) Say() string { return this.Name + ` hello world ! ` } func mai...阅读全文

博文 2018-06-04 11:33:05 mickelfeng

Golang处理JSON(二) 反序列化

在Go语言中,encoding/json标准包处理json数据的序列化与反序列化问题。如果想了解序列化可以看这一篇Golang处理JSON(一) 序列化。与编码json的Marshal类似,解析json也提供了Unmarshal方法。对于解析json,也大致分两步,首先定义结构,然后调用Unmarshal方法序列化。 反序列化 Unmarshal() 反序列化源码放在: Unmarshal // Unmarshal parses the JSON-encoded data and stores the result // in the value pointed to by v. If v is nil or not a pointer, // Unmarshal returns an In...阅读全文

博文 2020-03-15 09:32:43 程序猿编码

第二十七章:Go语言与RPC

1. RPC 概述 RPC 是Remote Procedure Call Protocol 的简写,其中文意思是远程过程调用协议 ,就是通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC将本地调用变为远程服务器上调用,这为系统处理能力和吞吐量带来了更大的提升,在OSI网络通信模型中RPC跨越了传输层和应用层. 我们通俗的理解就是像调用本地函数一样区调用远程的函数,实现函数调用模式的网络化.那么这个远程到底是多远,既可以是物理上的远程也可以是逻辑上的远程. 因为PRC的这种跨越了物理服务器的限制,在 RPC 中可选的网络传输方式有多种,可以选择 TCP 协议、UDP 协议、HTTP 协议 在现在的分布式系统中不同的节点之间比较常见的通信方式也是RPC 既然有远程过程调用...阅读全文

博文 2019-12-14 19:32:40 captain89

Influxdb中基于磁盘的倒排索引文件TSI结构解析

TSI文件结构概览 一个TSI文件的定义和操作在 tsdb/index/tsi1/index_file.go里实现的 一个TSI文件的结尾存储了这个文件相关的meta信息,主要是其他section在文件中的offset和size,这个meta信息被称为tsi文件的IndexFileTrailer,我们看一下它的Size的定义: IndexFileTrailerSize = IndexFileVersionSize + 8 + 8 + // measurement block offset + size 8 + 8 + // series id set offset + size 8 + 8 + // tombstone series id set offset + size 8 + 8 + ...阅读全文

博文 2018-12-23 11:34:44 扫帚的影子

golang - gob与rpc

今天和大家聊聊golang中怎么使用rpc,rpc数据传输会涉及到gob编码,所以先讲讲gob,别担心,就算你完全没有接触过gob与rpc,只要知道rpc的中文是远程过程调用,剩下的我都能给你讲明白(带你入门不包你精通)! 一、数据结构编码之gob gob全称为:Go binary Golang自带的一个数据结构序列化编码/解码工具,也就是说gob可以讲go中的一个数据结构序列化成某种东西,还能反序列化!序列化成啥我们后面来看,不管是变成一个字符串,变成二进制流,变成啥先不管,反正作用就是序列化。 Gob使用时我们需要关注Encoder和Decoder对象,顾名思义,一个是编码的时候用的,一个是解码的时候用的,我们看一下怎么获取这两个对象先: 所以很明确,需要调用这两个函数来获取Encode...阅读全文

博文 2018-07-28 21:30:00 cloudgeek

Golang 使用 protobuf 的教程

1、下载protobuf的编译器protoc 网站:https://github.com/google/protobuf/releases 选择各自平台的版本下载window: 下载: protoc-3.3.0-win32.zip 解压,把bin目录下的protoc.exe复制到GOROOT/bin下,GOROOT/bin加入环境变量。 当然也可放在其他目录,需加入环境变量,能让系统找到protoc.exelinux: 下载:protoc-3.3.0-linux-x86_64.zip 或 protoc-3.3.0-linux-x86_32.zip 解压,把bin目录下的protoc复制到GOROOT/bin下,GOROOT/bin加入环境变量。 如果喜欢编译安装的,也可下载源码自行安装,最后...阅读全文

博文 2020-01-20 17:32:43 佳闯天涯

golang[43]-blockchain-serialize

真实比特币序列化1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374package mainimport ( "bytes" "encoding/binary" "log" "fmt" "encoding/hex" "crypto/sha256")//将类型转化为了字节数组func IntToHex(num int32) []byte{ buff := new(bytes.Buffer)//binary.LittleEndian 小端模式 err:= binary.Wr...阅读全文

博文 2018-12-13 23:35:58 jonson_jackson

兄弟连区块链教程Fabric1.0源代码分析Tx RWSet(读写集)

区块链教程Fabric1.0源代码分析Tx RWSet(读写集),2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 # Fabric 1.0源代码笔记 之 Tx #RWSet(读写集) ## 1、RWSet概述 在背书节点模拟Transaction期间,为交易准备了一个读写集合。 Read Set包含模拟Transaction读取的Key和版本的列表,Write Set包含Key、写入的新值、以及删除标记(是否删除Key)。 RWSet相关代码分布在protos/ledger/rwset、core/ledger/kvledger/txmgmt/rwsetutil...阅读全文

博文 2018-11-08 15:33:24 ITXDL

Golang学习笔记之JSON解析

JSON是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读。 官方提供有Json解析包:官方库文档地址 下面只说两个比较重要的函数 一、将数据编码成json字符串 函数原型 func Marshal(v interface{}) ([]byte, error) Marshal函数返回v的json编码。v是interface{}类型,任何类型都实现了空接口。 •字段的tag是“-”,那么这个字段不会输出到JSON •tag中带有自定义名称,那么这个自定义名称会出现在JSON的字段名中。 •tag中如果带有“omitempty”选项,那么如果该字段值为空,就不会输出到JSON串中 •如果字段类型是bool,string,int,int64等,而tag中带有“,string”选...阅读全文

博文 2018-12-11 21:34:44 学生黄哲

【MPS最佳实践】媒体工作流转码

摘要: 背景 1个输入文件对应多个输出文件(不同分辨率,不同格式等),通过控制台的图形化界面,快速搭建常用视频处理流程。 优势 简单易用,视频上传完成自动触发转码任务。 功能强大,支持截图、转码、转封装、水印、加密、剪辑等功能。 **点此查看原文:http://click.aliyun.com/m/42850/** **背景** 1个输入文件对应多个输出文件(不同分辨率,不同格式等),通过控制台的图形化界面,快速搭建常用视频处理流程。 **优势** 简单易用,视频上传完成自动触发转码任务。 功能强大,支持截图、转码、转封装、水印、加密、剪辑等功能。 在媒体工作流开始执行和完成执行时,支持向指定的消息队列或消息通知发送工作流执行信息。 媒体库,为您提供音视频...阅读全文

Golang设计模式(工厂模式)

factory.go // factory package factory import ( "errors" "fmt" ) const ( Cash = 1 DebitCard = 2 ) type PaymentMethod interface { Pay(amount float32) string } func GetPaymentMethod(m int) (PaymentMethod, error) { switch m { case Cash: return new(CashPM), nil case DebitCard: return new(DebitCardPM), nil default: return nil, errors.New(fmt.Sprintf("Pay...阅读全文

博文 2019-06-23 12:32:38 FredricZhu

更好的 Golang 的 MongoDB 驱动 `globalsign/mgo`

用 1.3 版本使用 Go 开始,连接 MongoDB 使用的驱动中,最常见的就是:mgo.v2 这个库一度是唯一的选择,它的接口设计合理,与 Golang/MongoDB/bson 适配的也做的不错。然而这个库长期处于无人看管的状态,有一大堆让人难以忍受 bug,其中我们遇到的就有不少: 当短时间执行大量 db 操作把并发执行的与 MongoDB 的连接池增大之后,多余的连接没有被正确的回收掉(即便设置了 maxIdleTimeout 和 minPoolSize)。 执行 bulk 操作的 size 是固定不可配置的。 在我们的线上项目中,偶尔的业务峰值会照成某几个服务短时间大量的 db 操作,而一旦这些 db 操作带来的连接数量被撑大之后,耗尽 db 的连接数资源之后。其他的服务就无法连...阅读全文

博文 2019-09-03 18:32:44 秦川

好程序员web前端培训分享什么是Deno,它与Node.js的区别

好程序员web前端培训分享什么是Deno,它与Node.js的区别,Node.js的创建者Ryan Dahl花了一年半的时间研究deno,这是一个新的JavaScript运行时,可以解决Node的所有固有问题。 不要误解我的意思,Nodejs它本身就是一个很棒的服务器端JavaScript运行时,主要是因为它拥有很大的生态系统和JavaScript。然而,Node.js的创建者Ryan Dahl承认他应该考虑更多的-安全性,模块和依赖性,仅举几例。 在他的辩护中,并不是说他可以想象平台在如此短的时间内会增长多少。此外,早在2009年,JavaScript仍然是这种奇怪的小语言,每个人都取笑,而且它的许多功能还没有。 那么什么是Deno,主要特性有什么呢?1. Deno是一个基于V8构建的安全...阅读全文

博文 2019-07-29 15:03:59 好程序员官网

用protobuf生成json结构插件实现

背景json格式不便描述/统一管理在日常中json数据格式应用场景很多。比如在restful请求/返回、业务通信协议、消息(nsq/kafka),广泛使用json。但是目前存在如下问题json数据协议分散在代码里,没有一个统一的描述方式json使用往往使用map结构,然后序列化。造成上下游使用混乱,容易出错如果使用struct方式定义,那么需要手动写代码,很是繁琐比如以下示例:json格式如下: { "id": 123, "name": "fangming", "age": 18, "occ": {"id": 111, "industry": "professor"}, "occs": [ {"id": 111, "industry": "professor"}, {"id": 222, "...阅读全文

博文 2019-06-10 14:06:13 buptbill220

波司登全国超千家门店,销售状况如何实时监控?

摘要: 公司以往一直使用ERP的报表进行数据的展示,近期也上线了以HANA数据库为基础的BO报表进行业务数据支持,但是依然存在数据实时主动展示的缺陷。我们需要的销售业绩数据可以实时通过业绩大盘进行展示,这样可以更加友好的为团队提供数据支撑。 来自 波司登国际控股有限公司 黄金友 的撰稿 1. 需求概述 公司的零售团队存在一个无法实时获取市场的销售业绩数据并有效通过大盘进行展示的痛点。我们在与阿里云的合作过程中,了解了ARMS这款端到端一体化实时监控解决方案的PaaS级阿里云产品,正好可以很好地解决我们零售业务的痛点。我们成功完成了业绩数据的准备及业绩数据的展示。 这里简单分享一下ARMS用于实时业绩数据展示的经验。 公司以往一直使用ERP的报表进行数据的展示,近期也...阅读全文

go 的反射 reflect

Golang语言实现了反射,反射机制就是在运行时动态的调用对象的方法和属性,官方自带的reflect包就是反射相关的,只要包含这个包就可以使用。 grpc 的 golang 版本也是靠反射实现的。 reflect 的基本功能 reflect.TypeOf 返回类型 reflect.Type reflect.ValueOf 返回值 reflect.Value 可以从reflect.Value 中获取类型 通过Kind 来判断类型 先看第一个例子 一 、 反射的基本用法 ValueOf用来获取输入参数接口中的数据的值,如果接口为空则返回0 TypeOf用来动态获取输入参数接口中的值的类型,如果接口为空则返回nil // 反射的基础用法 func base00() { var num = 1.23...阅读全文

博文 2019-08-07 08:32:40 OOM_Killer

区块链教程Fabric1.0源代码分析Orderer BroadcastServer

区块链教程Fabric1.0源代码分析Orderer BroadcastServer,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。Fabric 1.0源代码笔记 之 Orderer #BroadcastServer(Broadcast服务端)1、BroadcastServer概述BroadcastServer相关代码在protos/orderer、orderer目录下。protos/orderer/ab.pb.go,AtomicBroadcastServer接口定义。orderer/server.go,go,AtomicBroadcastServer接口实现...阅读全文

博文 2018-11-05 15:35:07 兄弟连区块链培训

数组初始化的性能?

```go package main import ( "fmt" "time" ) func main() { size := 20000 matrix1 := make([][]int, size) for i := 0; i < size; i++ { matrix1[i] = make([]int, size) } start1 := time.Now() // 方法1 for i := 0; i < size; i++ { for j := 0; j < size; j++ { matrix1[i][j] = i + j } } fmt.Println(time.Since(start1)) matrix2 := make([][]int, size) for i := 0; i ...阅读全文

博文 2020-06-02 20:11:18 xmge

兄弟连区块链教程Fabric1.0源代码分析configupdate处理通道配置更新

区块链教程Fabric1.0源代码分析configupdate处理通道配置更新,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 Fabric 1.0源代码笔记 之 Orderer #configupdate(处理通道配置更新) 1、configupdate概述 configupdate,用于接收配置交易,并处理通道配置更新。相关代码在orderer/configupdate目录。 2、SupportManager接口定义及实现 2.1、SupportManager接口定义 type SupportManager interface { GetChain(cha...阅读全文

博文 2018-11-05 15:35:07 兄弟连区块链培训

再测Golang JSON类库

写项目一直需要进行序列化,听到了,也看到了很多同学老师对各个golang的json库进行测评。那本人为什么还要继续进行这一次测评呢?因为实践过的知识最有说服力,也是属于自己的,我也希望看到本博文的同学老师可以修改和执行测评的代码执行一遍,我相信会有不一定的体会。本次测评我选择了类库有: 类库 序号 类库 地址 备注 1 encoding/json Golan 2 easyjson github.com/mailru/easyjson 3 ffjson github.com/mailru/easyjson 4 iterator/json github.com/json-iterator/go 主要是针对上述的类型进行,本人采用了对不同的类库使用不同的结构体(仅仅是结构体名称不同,字段顺序和类型...阅读全文

博文 2018-07-02 12:23:23 梦朝思夕

[译]理解Go的reflect

文:medium.com/better-prog… Go是一个强类型的静态编程语言。然而,一些Go的特性让它看起来又像是一门动态语言。例如,如果你不确定你接收的参数的类型,你可以使用interface来接收所有类型的参数传递。 记住只有interface是有reflect属性的。 我们注意到interface允许Go实现多态。没有任何一种类型是特别需要强调的。可以是string int64 float32 甚至是集合(array/map)。但计算机运行这些代码时候,reflect帮助检查,修改其自身的结构与行为。这个过程允许我们知道对象的类型以及内存在运行时的结构。 我们为什么需要reflect? 允许提前定义参数类型(通常发生在暴露的API上) 函数能根据传参动态执行 reflect的缺点...阅读全文

博文 2019-11-07 00:04:22 野生程序元