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

系统链码

1. 名词解释及源码路径 Hyperledger Fabric v1.4提供了各种称为系统链码的特殊链码,用于执行某些特权任务。本文的目标是提供Fabric中各种系统链代码的实现,功能和用法的指示。与用户链码一样,系统链码也实现了Init和Invoke函数。Fabric有五个系统链码,如下所示: Configuration System Chaincode (CSCC) -- core/scc/cscc/configure.go Life Cycle System Chaincode (LSCC) -- core/scc/lscc/lscc.go Query System Chaincode (QSCC) -- core/scc/qscc/query.go Endorser System C...阅读全文

博文 2019-06-05 11:32:53 天地一小儒

golang[46]-区块链-比特币真实挖矿过程实现

比特币真实挖矿过程实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149...阅读全文

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

golang之x509解析及序列化

x509.Certificate Desierialize Error 调用json.Marshal将以下old code序列化后,在调用json.Unmarshan反序列化后,会出现各种解析出错的诡异问题。 最省力的方式时保存证书的pem,动态解析pem。 Old Code type Message struct { CertPEM x509.Certficate `json:"cert"` Msg []byte `json:"msg"` } New Code type Message struct { CertPEM string `json:"cert"` Msg []byte `json:"msg"` } golang解析证书pem的一般方式 Parse Cert.pem block...阅读全文

博文 2020-01-19 23:32:46 金果儿

CA,给了数据库,给了机器,为啥也扩不了容?

随着业务越来越复杂,数据量越来越大,并发量越来越大,数据库的性能越来越低。好不容易找运维申请了两台机器,让DBA部署了几个实例,想把一些业务库拆分出来,却发现拆不出来,扩不了容,尴尬! 因为数据库强关联在一起,无法通过增加数据库实例扩容,就是一个耦合的典型案例。 场景还原有一个公共用户数据库DB_USER,里面table_user存放了通用的用户数据:table_user (uid, name, passwd, …) 在数据量比较小,并发量比较小,业务还没有这么复杂的时候,为了提高资源利用率(程序员才没有考虑什么资源利用率,更多的是图方便),业务A把用户个性化的数据也放在这个库里:table_A(uid, A业务的个性化属性) 业务A有一个需求,即要展现用户公共属性,又要展现业务A个性化属性...阅读全文

博文 2017-11-29 02:26:44 58沈剑

工作总结

2010-2013 封装IOCP 内存池 使用CEGUI开发PC客户端UI 初识分布式 CS网络交互 单例、reactor、表驱动等设计模式 STL、模板 初识C# 初始多线程 版本管理 代码调试 xml 文件读写、配置解析 应用日志 sql 夯实C++基础,采用一些设计模式来更通顺的组织代码,以及会利用一些C++奇技淫巧来缩减代码,理解代码重构的意义。理解怎样用socket建立TCP连接来进行CS交互,以及通信中结构体的序列化和反序列化。对多线程安全有了初步的认知,了解互斥体、信号量和原子操作在多线程环境下怎样解决数据竞争。理解分布式架构下的数据同步、数据落地。熟悉游戏开发的总体流程。认识C#。 2013-2016 C#网络通信 Redis cocos2d-x、Unity Java/JNI...阅读全文

博文 2019-03-15 01:34:40 牧桐谣

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 使用感受

首先,无意进行语言之争,毕竟,PHP是世界上最好的语言,没有之一。这个话题可以停下来了。 2016年已经过去,16年的年度语言给了go语言,而正好这一年我都是用go用得比较多,而且版本从1.2一直用到了1.8,有一些感受,来说说我对这个年度编程语言的一些粗浅理解吧。之前也写过一篇go语言的文章,但是那时候用得还不是很多,有些特性没有用上,所以理解上和今天的有些不同。 这篇文章就不分什么优势和劣势了,想到哪里说到哪里。 指针还是很重要 先看一个小坑,可能很多初次接触go的会遇到,go的range迭代用得也很多,下面这个例子不知道你之前遇到过没有,其实值是不会变的,还是1,2,3。 type a struct { b int } func main() { m := make([]a, 0) m...阅读全文

博文 2017-02-09 06:00:22 吴yh坚

Go转型——数据结构初级(二)

**1**.线性结构 线性结构的特点是:在数据元素的非空有限集合中: **(1)**. 存在唯一一个被称之为“第一个”的数据元素 **(2)**. 存在唯一一个被称之为“最后一个”的数据元素 **(3)**. 除了第一个元素,集合中其他数据元素都均只有一个前驱 **(4)**. 除了最后一个元素,集合中其他数据元素都均只有一个后继 **2**. 线性表 线性表是最常用且最简单的一种数据结构,简言之,一个线性表是n个数据元素的有限序列,至于每个元素的含义各不同,可能是一个数字或者更复杂的某些信息。 在稍微复杂的线性表中,一个数据元素可以由若干个数据项组成,这种情况下,我们把数据元素称之为“**记录**”,把线性表称之为“**文件**”。日常一图顶千言: ![image.png](https:/...阅读全文

博文 2018-01-20 22:34:24 yinshidaoshi

彬哥笔记 --19 Go语言 游戏服务器消息的序列化和反序列化

大家好,我是彬哥,本节给大家讲下go语言服务器游戏消息的序列化相关,抛砖引玉了,主要是针对Go语言游戏服务器开发消息的序列化使用。 先给大家看了小demo,LollipopGo框架版本v1.0.20190104 ,demo代码如下: package main import ( "encoding/json" "fmt" "reflect" ) /* Go语言中 结构体转json的序列化;在LollipopGo v1.0.20190104 版本做了详细的说明 1 结构体转字符串 2 字符串转json */ var G_GolangltdMap map[int]*GolangLtd type GolangLtd struct { UID int Name string } func init()...阅读全文

博文 2019-01-09 14:34:46 Golang语言社区

golang json 性能分析

Json 作为一种重要的数据格式,具有良好的可读性以及自描述性,广泛地应用在各种数据传输场景中。Go 语言里面原生支持了这种数据格式的序列化以及反序列化,内部使用反射机制实现,性能有点差,在高度依赖 json 解析的应用里,往往会成为性能瓶颈,好在已有很多第三方库帮我们解决了这个问题,但是这么多库,对于像我这种有选择困难症的人来说,到底要怎么选择呢,下面就给大家来一一分析一下 ffjsongo get -u github.com/pquerna/ffjson 原生的库性能比较差的主要原因是使用了很多反射的机制,为了解决这个问题,ffjson 通过预编译生成代码,类型的判断在预编译阶段已经确定,避免了在运行时的反射 但也因此在编译前需要多一个步骤,需要先生成 ffjson 代码,生成代码只需要...阅读全文

博文 2018-02-26 09:21:59 hatlonely

golang标准库中的encoding/json包

1、什么是JSON? 2、go标准库json包的内容? 3、开发中常用json操作? 一、什么是JSON? JSON简单的理解就是特殊格式的字符串,被设计用来传输和存储数据,和xml类似,但是在API和前后端分离数据交互更多是使用json,json不仅比XML简单,传输中更节省文本。网站中的ajax、后端api基本上是使用json编码后的数据。 二、go标准库json包的内容? 结构体 1)type InvalidUTF8Error func (e *InvalidUTF8Error) Error() string Go1.2之前版本,当试图编码一个包含非法utf-8序列的字符串时会返回错误。Go1.2及之后版本,编码器会强行将非法字节替换为unicode字符U+FFFD来使字符串合法。本错...阅读全文

博文 2018-12-12 19:34:43 laijh

蚂蚁金服 Service Mesh 落地实践与挑战 | GIAC 实录

本文整理自 GIAC(GLOBAL INTERNET ARCHITECTURE CONFERENCE)全球互联网架构大会,蚂蚁金服平台数据技术事业群技术专家石建伟(花名:卓与)的分享。分享基于 Service Mesh 的理念,结合蚂蚁金服内部实际场景,将中间件、数据层、安全层等能力从应用中剥离出来后下沉至独立的 Sidecar SOFAMosn 中,结合 Kubernetes 运维体系,提供应用无感知的情况下升级基础设施层能力的案例。 本次分享将从以如下次序展开进行: 蚂蚁金服当前的服务化现状在看蚂蚁金服的服务化架构之前我们先从一个简单的服务化调用示例说起,下图是 SOFARPC 基本原理: 图1. SOFARPC 基本原理 我们从上图可以看出,构建一个服务化框架需要有服务注册中心,有服务...阅读全文

博文 2019-06-26 13:32:46 金融级分布式架构

Golang语言下使用Protocol Buffer教程

代码仓库地址 一、介绍 Protobuf是Google旗下的一款平台无关,语言无关,可扩展的序列化结构数据格式。所以很适合用做数据存储和作为不同应用,不同语言之间相互通信的数据交换格式,只要实现相同的协议格式即同一proto文件被编译成不同的语言版本,加入到各自的工程中去,这样不同语言就可以解析其他语言通过Protobuf序列化的数据。目前官网提供了C++,Python,JAVA,GO等语言的支持。 相对于JSON和XML具有以下优点: 简洁 体积小:消息大小只需要XML的1/10 ~ 1⁄3 速度快:解析速度比XML快20 ~ 100倍 使用Protobuf的编译器,可以生成更容易在编程中使用的数据访问代码 更好的兼容性,Protobuf设计的一个原则就是要能够很好的支持向下或向上兼容 注...阅读全文

博文 2018-08-14 00:30:02 OctoptusLian

轻松学习区块链3 - KV数据库的实现和区块链数据的持久化

MiniBC区块链V002 - KV数据库的实现和区块链数据的持久化 KV数据库 虽然我们已经创建了一条非常简单的区块链,但是当程序关闭后,内存中的区块数据却没有保存下来。这使得我们无法重复使用一个区块链,也无法与其他人分享,我们需要将它存储在硬盘中。我们接下来的任务就是实现一个极小的KV数据库,用来保存区块链数据。像比特币bitcoin使用了leveldb数据库,也有些golang开发的区块链采用了BoltDB,它们都属于单机KV数据库。 KV数据库,也就是key/value数据库,这种数据库没有关系型数据库系统RDMBS(比如MySQL,Oracle,PostgreSQL等)的表(table)、行(row)、列(column)等概念。数据均以键/值(key/value)的方式进行存储,类...阅读全文

Protobuf编码指南

这个文档会介绍protocol buffer的二进制有线格式(binary wire format)。你并不是需要理解这些后才能在应用里使用protocol buffer,但是当你想知道不同的protocol buffer格式是如何影响编码后的消息体的体积时,这些知识会非常有用。 一个简单的消息 假设有一个非常简单的消息定义: message Test1 { optional int32 a = 1; } 在应用中,你创建了一个Test1消息并把a设置为150。然后你把消息序列化到输出流中,如果你能查看编码后的消息,你会看到三个字节: 08 96 01 到目前为止,如此小而且都是数字-但是这是什么意思呢?继续往下看 Varint编码 要理解上面protocol buffer编码的数据,你需要...阅读全文

博文 2019-09-29 22:32:48 KevinYan

游戏服务器背包设计与实现

文:https://www.cnblogs.com/wgslucky/p/6079730.html 在游戏开发中,背包是一个非常重要的功能。几乎每个复杂点的游戏都会有背包的功能。不管是手游戏还是网页游戏,不管是SLG游戏,还是ARPG游戏,背包是必不可少的。背包的功能根据策划的要求,有的简单,有的复杂。以下我们就讨论一下几种游戏服务器背包的实现。 1,简单的游戏背包设计 简单的游戏背包到底简单到什么程度呢?那么这个游戏背包只是用来存放物品,不需要记录物品在背包中的位置,只需要记录物品的id和物品的数量即可。这样的游戏背包设计起来非常方便,在数据库中一个物品占一行即可,例如: image 当获得物品的时候,先查看这个物品是否已存在,如果不存在,则创建一个物品的对象,并插入到数据库,如果这个物品...阅读全文

博文 2019-01-21 00:34:45 Golang语言社区

Golang gob与rpc简介

本文参考 Gob的数据 手机网络游戏应用协议设计(一) 关于protobuf基础知识,可以参考Protobuf 以及在Laya中的使用 关于varint,参考数值压缩存储方法Varint和图解Protobuf编码 为了让某个数据结构能够在网络上传输或能够保存至文件,它必须被编码然后再解码。当然,已经有许多可用的编码方式了:JSON,XML,Google 的 protocol buffers,等等。而现在,又多了一种,由 Go 的 gob 包提供的方式。 为什么定义新的编码?这要做许多繁重的工作。为什么不使用某个现成的格式?呃,无论如何,我们这样做了!Go 已经有刚才提到的所有编码方式的包(protocol buffer 包在另外一个代码库中,但它是下载得最多的包之一)。并且在许多情况下,包括...阅读全文

博文 2019-03-14 01:34:41 懒皮

一行代码引起的协程泄露

前言 最终定位到的结果比较蠢,巨佬可以直接查看结果,本文只为记录寻找该bug时使用的方法而生。 本人平日维护一个公司运营平台的一个配置库,由于降级措施比较好,而且公司容器实例也比较多,所以在爆发错误的时候并未及时跟进。该问题应该从该服务出生开始就已经有了,一直没有爆发的原因应该是因为以前迭代得比较多,一周也差不多会发布四到五次,再加上平台在去年使用人数还是比较少的,后面逐渐成为公司一个中流砥柱的产品,被许多部门所使用,所以问题就爆发了。 第一次猜想 “这服务怎么协程突然暴涨了” 第一次协程暴涨的时候,发现有一台实例突然就跪了,协程数疯狂暴涨,内存也疯狂暴涨,第一反应是db出现了慢查询,但是实际上。而查看监控,并没有特别多接口跪,如图。 而实际上能很明显看到有几个实例的协程数直线上涨。 其实因...阅读全文

博文 2020-05-31 21:34:46 QuanQqqqq

golang - gob与rpc

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

博文 2018-07-21 22:16:03 CloudGeek

Go 常量学习-可视化指南

> Go 的类型常量和非类型常量是两个必须要了解的关键概念 不要忘记在文章下面有很多代码示例,因此你要确保点击这些链接并尝试运行这些程序。 ## 你为什么使用常量? ![why_might_you_use_constants?.image ](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-const-guide/1*r734fn1RBz1c1J2cKM7ZGw.png) 你不想在代码中到处定义[魔法数值](https://en.wikipedia.org/wiki/Magic_number_%28programming%29),于是使用常量来声明它们,并在代码中再次使用它们。 魔法数值是不安全的,你需要...阅读全文

gob 新的数据编码方式(序列化与反序列化数据)

介绍 数据在网络上传输,不同的服务端通信需要基于一定的协议进行交换数据。发送端encode编码数据,接收端decode解码数据。 常见的的一些数据编码方式:json,xml,proto buffers, html等 gob 与json,xml类似是一种基于go原生的数据 使用场景 为什么go 定义了新的一种数据编码方式? 常见的数据编码如json,xml等,是为了兼容已经存在的数据编码方式,可以与其他语言服务进行通信。 对于两端同样是go开发的服务,可以使用gob进行更快,更高效的数据传输。 优点 自描述数据格式:发送端与接收端无需沟通,定义两端统一的数据格式 传输速度更快,更高效 basic 基于gob编码的流数据,包含自描述类型信息,各项数据处理前包含类型信息 支持的类型:基础数据类型(...阅读全文

Go语言学习之encoding/gob包(The way to go)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangshubo1989/article/details/73294110 生命不止,继续 go go go !!! 为了让某个数据结构能够在网络上传输或能够保存至文件,它必须被编码然后再解码。当然,已经有许多可用的编码方式了:JSON,XML,Google 的 protocol buffers,等等。而现在,又多了一种,由 Go 的 gob 包提供的方式。 gob是Golang包自带的一个数据结构序列化的编码/解码工具。 编码使用Encoder,解码使用Decoder。一种典型的应用场景就是RPC(remote procedure calls)。 gob和json的pack之类的方法一样,由...阅读全文

博文 2019-04-19 16:31:04 wangshubo1989

[golang] json序列化时自动将id加密

对于有规则的数据索引,比如用户ID,商品ID,订单编号,很容易第三方直接遍历抓取资源。采用liamylian/json-hashids进行加密,可以有效避免这类情况发生。但因为是对等加密,需注意该加密算法并不安全,使用时需注意场景,详情请见hashids。 package main import( "fmt" "github.com/liamylian/json-hashids" "time" ) var json = jsonhashids.NewConfigWithHashIDs("abcdefg", 10) type Book struct { Id int `json:"id" hashids:"true"` // 这里要给id打上hashids的tag Name string `j...阅读全文

(翻译)可拔插交易背书和验证

可拔插交易背书和验证 动机 当交易在提交被验证时,peer节点在交易本身的状态改变之前执行各种检查: 验证签名交易的标识 验证交易中背书人的签名 确保交易满足相应链码的命名空间的背书策略 有些用例要求与fabric验证规则不同的自定义交易验证规则,例如: State-based endorsemet(基于状态的背书):当背书策略取决于密钥,并不仅仅取决于命名空间。 UTXO(Unspent Transaction Output未花费交易输出):当验证考虑到,不论交易是否不会对输入双花。 Anonymous transactions(匿名交易):当背书不包含peer节点的身份,但是无法链接到peer节点身份的签名和公钥被共享。 可拔插背书与验证逻辑 fabric运行将定制的背书和验证逻辑实现和...阅读全文

博文 2018-07-31 17:34:50 还是小把戏

GO语言的json输入(反序列化)之interfac{}存储

// code_032_json_unmarshal_to_interface project main.go package main import ( "encoding/json" "fmt" ) func main() { b := []byte(`{ "company":"tianmei", "subjects":[ "Go", "C++", "Python", "Test" ], "isok":true, "price":666.666 }`) //备注:subjects:["Test",]后面没有元素了,还有逗号会报错的。 var t interface{} err := json.Unmarshal(b, &t) if err != nil { fmt.Println("js...阅读全文

博文 2018-10-07 02:35:15 ck_god

Go 关于interface的理解

Go 中的 interface 是一种抽象类型。一个 interface 就是包含了一系列行为的method集合。 关于 interface 的定义,以 Writer 为例: package io type Writer interface { Write(p []byte) (n int, err error) } Go 中的 interface 属于隐式接口。一个类型如果拥有一个接口需要的所有方法,那么这个类型就实现了这个接口...阅读全文

博文 2018-04-06 13:34:39 Never_Mind

听说,你想让自己的Go程序运行的更快?

版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/51219512 原文链接: http://bravenewgeek.com/so-you-wanna-go-fast/ 到现在为止,我已经忘记了我在写什么,但我确定这篇文章是关于Go语言的。这主要是一篇,关于运行速度,而不是开发速度的文章——这两种速度是有区别的。 我曾经和很多聪明的人一起工作。我们很多人都对性能问题很痴迷,我们之前所做的是尝试逼近能够预期的(性能)的极限。应用引擎有一些非常严格的性能要求,所以我们才会做出改变。自从使用了Go语言之后,我们已经学习到了很多提升性能以及让Go在系统编程中正常运转的方法。 Go的简...阅读全文

博文 2019-03-17 13:14:06 erlib

golang结构体json的时间格式化解决方案

使用了OSC这么久了还没有写一篇博文,真实惭愧!在次写下第一篇。 最近开发项目时候发现一个结构体的Json转换的时间格式问题。 即这种1993-01-01T20:08:23.000000028+08:00 这种表示UTC方法。从我们习惯来说,更喜欢希望的是 1993-01-01 20:08:23这种格式。 重新复现代码如下: package main import ( "time" "encoding/json" ) type Student struct { Name string `json:"name"` Brith time.Time `json:"brith"` } func main() { stu:=Student{ Name:"qiangmzsx", Brith:time.D...阅读全文

博文 2017-09-12 03:52:51 梦朝思夕

go的内存模型

Introduction Go内存模型说明在什么情况下,可以保证一个goroutine中某变量a的读取,可以是另外一个goroutine对变量a写入的值。 Advice 修改由多个goroutine同时访问的数据的程序必须序列化此类访问。要序列化访问,请使用channel或其他同步原语(如sync和sync/atomic包中的同步原语)保护数据。 Happens Before 在一个goroutine中,读写操作必须按照程序指定的顺序执行。也就是说,只有在重新排序不会改变语言规范定义的goroutine内的行为时,编译器和处理器才可以重新排序在单个goroutine内执行的读写操作。由于这种重新排序,一个goroutine观察到的执行顺序可能与另一个goroutine观察到的顺序不同。例如,...阅读全文

计算机学生需要什么?

作为一个毕业一年的计算机学人。实在谈不上什么经验,也没脸说什么技巧。 以下作为几点建议,万一对你有点帮助呢? 在这之前,你需要做好的唯一的心理建设就是:坚定目标。 坚定目标可以让我们走的弯路越少。不会浪费时间在一些有点用,但是用处不大的地方 眼睛看得越远,走得越直。 精通一门语言,无论Python,Java,C,C++,C# 都无所谓 无论你有多笨,在你掌握了一门编程语言之后,再学习其他编程语言,最多不超过60天,都能掌握。除非你笨到不然下面这个单词:fuck 你可以选择大学期间最先接触的C语言;或者语法简洁的Python语言;也可以是用的人最多的Java。 为什么我要这么推荐呢? 因为,一家好公司,是不在乎你用什么语言的。他们知道,在有一门语言基础的情况下,再学一门语言只需要60天而已。 ...阅读全文

博文 2020-04-10 23:32:42 灰熊不太行

2019回顾篇

19年在nginx,redis,mysql,golang,php方面有了自己的领悟,但是感觉一眼看去又道不出所以然,感觉是不是要总结点什么了,以后技术方案选型时候才能清晰的道出所以然。 nginx nginx深入配置篇章教程 看了很多nginx配置文章,还是以实际场景来划分把 0.了解nginx的模块划分的配置结构思想 1.分别以tcp和unix的通讯方式配置 nginx + php-fpm 2.nginx配置静态资源服务器 3.nginx配置location根据不同的路径进行转发到不同项目目录 4.ngixn配置负载均衡(ip模式,权重模式...) 5.nginx 并发场景优化 nginx 结构分析篇 ... #全局块。 events { #events块 ... } http #http...阅读全文

「译」Go Context 在 HTTP 传播

Go 1.7 引入了一个内置的 context 类型,在系统中可以使用 Context 来传递元数据,例如不同函数或者不同线程甚至进程的传递 Request ID。 Go 将 Context 包引入标准库以统一 context 的使用。在此之前每个框架或者库都有自己的 context 。它们之间还无法兼容,导致了碎片化,最终在各处 context 的传播上就有不少的麻烦。 虽然在同一个处理过程中有一个通用的 context 传播机制是非常有用的,但是 Go 的 Context 包并没有提供该功能。就像上面描述的,context 会在网络中被不同的处理过程传递。例如在多服务架构中,一个请求往往会在多个地方被处理 (多个微服务,消息队列,数据库等),直到最后响应给用户。能够在多个处理过程中传递 ...阅读全文

博文 2019-04-28 20:10:37 正小歪的博客

Golang之gRPC协议

简介 gRPC即远程过程调用,是服务器端程序设计常用的一种技术,由Google不久前开源,是一个基于HTTP2 和 Protobuf 的RPC 实现,gRPC 提供了c 、Java、golang 的原生实现并以cgo的方式支持Node.js, Python, Ruby, Objective-C, PHP 和 C# 语言。 源码 https://github.com/grpc/grpc 特性 高效性 跨语言 基于HTTP/2协议标准 基于ProtoBuf(Protocol Buffers)序列化协议 安装(需要翻墙) https://grpc.io/docs/quickstart/go.html#before-you-begin PS: 没有翻墙条件的,可以将源码clone到相关目录 Wech...阅读全文

博文 2017-09-19 07:34:53 faceowener

《Go语言四十二章经》第三十八章 数据编码(encoding)

# 《Go语言四十二章经》第三十八章 数据编码(encoding) 作者:李骁 ## 38.1 序列化与反序列化 数据结构要在网络中传输或保存到文件,就需要对其编码和解码,目前存在很多编码格式:json,XML,Gob,Google Protocol Buffer等,Go 语言当然也支持所有这些编码格式。 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。通过从存储区中读取对象的状态,重新创建该对象,则为反序列化。 简单地说把某种数据结构转为指定格式为 序列化 或 编码(传输之前);而把“指定格式”转为某种数据结构则为 反序列化 或 解码(传输之后)。比如:把数据结构转换成指定格式(data ->...阅读全文

博文 2018-10-18 21:50:47 roteman

兄弟连区块链教程Fabric1.0源代码分析Peer peer chaincode命令及子命令实现

兄弟连区块链教程Fabric1.0源代码分析Peer peer chaincode命令及子命令实现,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。# Fabric 1.0源代码笔记 之 Peer #peer chaincode命令及子命令实现## 1、peer chaincode install子命令实现(安装链码)### 1.0、peer chaincode install子命令概述peer chaincode install,将链码的源码和环境封装为一个链码安装打包文件,并传输到背书节点。peer chaincode install支持如下两种方式:* 指...阅读全文

博文 2018-11-06 19:34:39 兄弟连区块链培训

【刘文彬】以太坊RPC机制与API实例

文链接:醒者呆的博客园,https://www.cnblogs.com/Evsward/p/eth-rpc.html 上一篇文章(【刘文彬】探路以太坊)介绍了以太坊的基础知识,我们了解了web3.js的调用方式是通过以太坊RPC技术,本篇文章旨在研究如何开发、编译、运行与使用以太坊RPC接口。 关键字:以太坊,RPC,JSON-RPC,client,server,api,web3.js,api实例,Postman rpc简介 RPC(remote process call),名曰远程过程调用。意思就是两台物理位置不同的服务器,其中一台服务器的应用想调用另一台服务器上某个应用的函数或者方法,由于不在同一个内存空间不能直接调用,因此需要通过网络来表达语义以及传入的参数。RPC是跨操作系统,跨编程...阅读全文

博文 2018-12-26 21:34:44 圆方圆区块链

DockOne微信分享(八十):云计算应用技术发展与企业异构资源池统一管理案例分析

【编者的话】本次分享介绍了企业用户私有云的建设与变迁过程。从VMware虚拟化起步到后期的管理多种类型计算池与存储池的异构云平台,用户的需求,软硬件选型都具有代表性。主要内容包括: 云平台管理CloudStack资源池拓扑介绍CloudStack到OpenStack的变迁OpenStack对接多种类型存储云平台升级与对接多种类型资源池 大家好,今天分享一个私有云平台的实施和升级案例。 客户是一家研发公司。用户主要是公司的研发测试人员。 这个环境的特点是虚拟机的生命周期较短。一般一个项目开始会申请一批虚拟机,随着研发测试结束虚拟机就会销毁,而且在使用中经常会有测试失败虚拟机重建的情况。 还有一个特点就是负载较集中,每逢月底或周末前会有一个业务高峰期,周末或节假日时间负载明显变小。 我们先来看看...阅读全文

博文 2017-06-25 16:25:15 ccbrown

徒手写一个JSON解析器(Golang)

前一阵子看到了一个Golang的JSON库go-simplejson,用来封装与解析匿名的JSON,说白了就是用map或者slice等来解析JSON,觉得挺好玩,后来有个项目恰好要解析JSON,于是就试了试,不小心看了一眼源代码,发现竟然是用的Golang自带的encoding/json库去做的解析,而其本身只是把这个库封装了一层,看起来更好看罢了。于是心想能不能徒手写一个解析器,毕竟写了这么多年代码了,也JSON.parse,JSON.stringify了无数次。捣腾了两天,终于成了,测试了一下,性能比自带的库要高很多,速度基本上在1.6到7倍之间(视JSON串的大小和结构而定),所以决定写这篇文章分享一下思路。 先插一个段子,作为一个已经完完整整写了将近三年代码的老码农,前一段面试,不止...阅读全文

博文 2017-07-24 18:06:46 一路行歌

golang map初始化的坑

Map nil import ( "fmt" ) //panic: assignment to entry in nil map type Param map[string]interface{} type Show struct { Param } func main() { s := new(Show) //s.Param["RMB"] = 10000 //panic: assignment to entry in nil map s.Param = map[string]interface{}{} s.Param = Param{} s.Param["RMB"] = 10000 fmt.Println(s) } package main import "fmt" type Param ...阅读全文

博文 2020-05-29 11:34:13 夜空一起砍猩猩

分享一个 golang 的数字证书开发库

go-certool 这个库主要设计目标是用来在去中心网络中开发 CA 功能, 密钥使用 ECC 算法,不推荐也不支持 RSA 密钥; 接口 Keychain 用来操作证书信任链,将业务系统中识别的 CA 全部添加到 keychain 对象中,keychain 可以序列化到磁盘上,主要用来验证证书是否合法 type Keychain interface { Verify(cert *x509.Certificate) (chains [][]*x509.Certificate, err error) VerifyCRL(crl *pkix.CertificateList) error Serialize() ([]byte, error) AppendRoot(cert *x509.Cert...阅读全文

阿里云移动数据分析服务使用教程

课程介绍 移动数据分析 (Mobile Analytics) 是阿里云推出的一款移动App数据统计分析产品,为开发者提供一站式数据化运营服务:通用的多维度用户行为分析、数据开放并支持自定义分析、数据无缝对接其他数据应用产品,助力移动开发者实现基于大数据技术的精细化运营、提升产品质量和体验、增强用户黏性。 产品详情:https://www.aliyun.com/product/man/ 课时列表 • 课时1:开通服务及创建应用 • 课时2:集成SDK及初始化应用 • 课时3:页面及自定义事件埋点 • 课时4:业务分析报表 • 课时5:数据自定义分析 开始学习http://click.aliyun.com/m/27867/ ...阅读全文

Go是如何实现protobuf的编解码的(2):源码

文链接:https://mp.weixin.qq.com/s/oY... 这是一篇姊妹篇文章,浅析一下Go是如何实现protobuf编解码的: Go是如何实现protobuf的编解码的(1): 原理 Go是如何实现protobuf的编解码的(2): 源码 本编是第二篇。 前言 上一篇文章Go是如何实现protobuf的编解码的(1):原理中已经指出了Go语言数据和Protobuf数据的编解码是由包github.com/golang/protobuf/proto完成的,本编就来分析一下proto包是如何实现编解码的。 编解码原理 编解码包都有支持的编解码类型,我们暂且把这些类型称为底层类型,编解码的本质是: 为每一个底层类型配备一个或多个编解码函数 把一个结构体的字段,递归的拆解成底层类型,然...阅读全文

博文 2019-09-09 21:02:39 大彬

golang标准库中的encoding/gob包

1、golang中的gob包是什么? 2、go标准库中的gob编码规则 3、gob包给开发者提供了什么内容?以及怎么使用? 4、gob的目的是什么?以及应用场景有哪些? 一、golang中的gob包是什么? gob是golang包自带的一个数据结构序列化的编码/解码工具。 二、go标准库中的gob编码规则 image.png 当发生方传递的是struct{A,B int}结构的值,接收方可以允许前9种结构,但是后4四种结构却是不允许的。 允许模拟相似,但是不允许矛盾 各个类型的编码规则 1、结构体内只有导出字段并且导出字段才能被编码和解码 2、编码至少存在一个可编码字段,解码也至少需要一个能被解码字段,不然会报错。 3、解码方的导出字段必须存在与编码后的同名字段,类型一致,或者接收方为同类型...阅读全文

博文 2018-12-12 14:34:48 laijh

微服务--整体...

微服务 ---- “微”? “服务”?微 : 体积小服务 : 不同于系统 , 服务一个或者一组相对较小且独立的功能单元 ,是用户可以感知到的最小单位 !广义 : 分布式系统解决方案,推动细粒度服务的使用,让这些服务协同合作!《微服务》 与 《微服务框架》 的区别?微服务架构 : 是将复杂的系统使用组件化的方式进行拆分,并使用轻量级通讯方式(protobuf)进行整合的一种设计方法。微服务 :是通过 《微服务架构》这种架构方法拆分出来的一个独立的组件化的小应用。 微服务架构定义的精髓 ---- “分而治之,合而用之” 将复杂的事情拆分成小事情来做 , 通过轻量级通讯等方式把拆分的东西进行整合,使微小的功能合起来做大事情 。 ----- 例如,积木,机甲合体之类的。 《单体架构》 缺点 : 1、...阅读全文

博文 2019-05-08 03:35:05 张家驹

2019年度总结

2019年目标 2019年,可能当时心里有目标,但是没有写出来,更没有使用OKR的方式表达出来,现在年底往前翻目标的时候,已经忘记了自己的出发点。 2019年大事记 2019年,最大的事情,应该就是放弃创业,选择加入了小年糕这家公司,现在来看当时的决定,是一个非常正确的选择,虽然也经历了大概半年的挣扎和磨合,但是我很喜欢这里,学习到很多其他地方学习不到的东西,也有很多想感谢的人。 3月入职小年糕,3月主要是在适应公司文化,适应节奏。 4月上线基于谷歌论文的ABtest分层实验平台,架构比较简单,系统性能TP99在1ms左右,现在已经全量使用在小年糕的推荐系统上。用到的技术也很简单,就是本地缓存&redis缓存。 5月,重构了内容审核系统,彻底解决之前系统中的漏审和审核历史问题,系统易用性也大...阅读全文

博文 2020-01-29 05:32:40 不如假如

Go 学习笔记

[内容][111] Hello World Part 1 开发环境 环境变量设置 GOROOT 指定 golang sdk 的安装目录 GOPATH golang 工作目录,项目的源码放在这个目录下 PATH 将 GOROOT/bin 放在 Path 路径下,方便命令行能直接运行 golang的命令行工具 Go项目目录结构 |--project // 位于GOPATH下 |--src // 存放源代码 |--packageA |--packageA.go |--packageB |--packageB.go |--pkg // 编译后生成的文件 |--bin // 编译后生成的可执行文件 Part 2 基础知识 Go的注释 行注释 // 行注释 ...阅读全文

博文 2018-09-05 23:34:40 gothicrush

DockOne微信分享(一一一):LAIN 平台远程进入容器功能设计与实现

【编者的话】本次分享主要介绍在宜信大数据创新中心的开源 PaaS 平台LAIN中,基于 WebSocket 和 Docker Remote API 远程进入单进程容器功能的设计与实现。 【上海站|3天烧脑式微服务架构训练营】培训内容包括:DevOps、微服务、Spring Cloud、Eureka、Ribbon、Feign、Hystrix、Zuul、Spring Cloud Config、Spring Cloud Sleuth 等。 LAIN 平台介绍LAIN 是宜信大数据创新中心基于 Docker 开发的 PaaS 平台。目前已经开源至 GitHub 并已经在内部生产化。 LAIN 提供了裸机之上、应用开发之下的 DevOps 问题的整体解决方案;规范了应用开发、测试、上线工作流,辅以 S...阅读全文

博文 2017-06-25 16:25:34 DarkForces.

用 golang 实现区块链系列三 | 持久化与命令行

简介 到现在为止,我们已经搞了一个带有工作量证明的区块链,它使得挖矿成为可能。我们的实现已经离一个功能全面的区块链更近了一步,但仍然缺少一些重要的功能。今天我们会开始吧区块链存在一个数据库里,然后做一个简单的命令行接口投操作区块链。本质上,区块链是一个分布式的数据库。我们先省略“分布式”这个部分,集中处理“数据库”这部分。 数据库选择 当前,我们的视线中没有数据库;作为替代,我们每次运行程序会创建区块并存在内存里。我们不能重复使用区块链,我们不能和其他人共享数据,所以我们需要把它存在硬盘上。 我们需要哪种数据库?事实上,一个都不需要。在 比特币论文的原文 中,从来没说过要用哪种依存数据库,所以开发者高兴用哪个就用哪个。 比特币核心,就那个中本聪最初发布的版本,也是目前比特币实现的参考版本,使...阅读全文

博文 2018-11-19 20:34:51 小马哥_Magical

beego学习笔记四

楔子 最近因为996的事情分散了很多的精力,做了一个游戏的策划,但是毕竟不是专业做游戏的,同时也没有人加入协助,我很可能把它给鸽掉。不过呢,由此了解了一个galgame的牛叉游戏引擎renpy,使用python写的,所以除了做单纯的galgame以外,还可以使用原生python做其他的游戏,等有时间研究了倒是可以单独写一篇文章介绍一把。 做一个系统,其中有一个功能是系统管理,系统管理的的设置可以选择直接保存在数据库,也可以写一个统一的配置文件(text、json、yaml各种)再把这个文件保存在数据库,当然还有一种方式是直接写一个配置文件扔在本地,就像beego的app.conf一样。 在ilus里面,我选择使用yaml文件,好处嘛,比json更为精简,又比传统配置文件多了对应关系,方便你随...阅读全文

博文 2019-04-19 21:34:39 井月轩