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

基于 Graphviz 的可视化数据结构工具memviz

memviz 是一个基于 Graphviz 的可视化数据结构工具。 如下图所示,你更喜欢哪种调试数据结构的方式? ![image](https://static.oschina.net/uploads/space/2018/0128/195104_ghWN_2720166.png) memviz 需要一个指向任意数据结构的指针,然后生成一个易于理解的图片。 只需传递如下的数据结构:`memviz.Map(out, &data)`,然后将输出结果到 graphviz...阅读全文

拉勾网职位爬取及可视化

Github地址:https://github.com/JasonJe/memos/tree/master/jobs_data_analysis 爬取 爬取程序为crawl.py 直接运行即可进行爬取,python3 ./crawl.py。 说明:爬取的招聘网站为拉勾网,其职位详情页有反爬策略,即单个cookies不可连续获取2次详情页内容,这里使用代理请求首页来更新cookies,保证正常的详情页爬取。 数据可视化 可视化文档为data_analysis.ipynb 数据分析 & 可视化: 职位关键词Top 10 职位关键词Top 10 HR活跃时间分布 HR活跃时间分布 通过分析HR的活跃时间,可以知道在大概早上09:00 ~ 11:00 和下午14:00 ~ 18:00这两个时间段进行...阅读全文

博文 2019-10-28 11:32:53 aside section._1OhGeD

推荐一个 Vue.js 2 的入门级全家桶教程

推荐Vue.js的入门级全家桶教程: 1.vue.js 入门与提高: [http://xc.hubwiz.com/course/vue.js](http://xc.hubwiz.com/course/592ee9b2b343f27b0ae1ba99?affid=studygolangvuejs20180310) 2.vuex 2 入门与提高: [http://xc.hubwiz.com/course/vuex](http://xc.hubwiz.com/course/597d463fff52d0da7e3e397a?affid=studygolangvuex20180310) 3.vue-router 入门与提高: [http://xc.hubwiz.com/c...阅读全文

golang通过反射克隆数据

啥也不说,直接上代码 package utils import ( "encoding/json" "reflect" ) //浅克隆,可以克隆任意数据类型,对指针类型子元素无法克隆 //获取类型:如果类型是指针类型,需要使用Elem()获取对象实际类型 //获取实际值:如果值是指针类型,需要使用Elem()获取实际数据 //说白了,Elem()就是获取反射数据的实际类型和实际值 func Clone(src interface{}) interface{} { typ := reflect.TypeOf(src) if typ.Kind() == reflect.Ptr { //如果是指针类型 typ = typ.Elem() //获取源实际类型(否则为指针类型) dst := refle...阅读全文

博文 2020-02-09 15:32:41 悟道人

以太坊源码分析(1)go-ethereum的设计思路及模块组织形式

兄弟连区块链学院院长尹成资深区块链技术专家:毕业于清华大学,曾担任Google算法工程师,微软区块链领域全球最具价值专家,微软Tech.Ed大会金牌讲师。精通C/C++、Python、Go语言、Sicikit-Learn与TensorFlow。拥有15年编程经验与5年的教学经验,资深软件架构师,Intel软件技术专家,著名技术专家,具备多年的世界顶尖IT公司微软谷歌的工作经验。具备多年的软件编程经验与讲师授课经历,并在人机交互、教育、信息安全、广告、区块链系统开发诸多产品。具备深厚的项目管理经验以及研发经验,拥有两项人工智能发明专利,与开发电子货币部署到微软WindowsAzure的实战经验。教学讲解深入浅出,使学员能够做到学以致用。go-ethereum的设计思路及模块组织形式======...阅读全文

博文 2018-07-12 17:34:48 Delete_88c3

Go Protobuf 资源的可读化

工作上有大量协议采用 Google Protocol Buffer,关于 Protobuf 的简单介绍可以看 IBM 的《Google Protocol Buffer 的使用和原理》这篇介绍。简单来说,Protobuf 的优点是(相比 XML)更小、更快、更简单,同时可以向后兼容。缺点的话,对我日常工作影响比较大的就是可读性较差,因为 Protobuf 压缩的时候会做序列化,生成 pb 文件,这个文件是二进制的,无法做到 human readable。但在日常工作中,尤其是排查问题是,经常需要看资源文件内容是否正确、上下游服务收发包内容是否正确、伪造 pb 资源等等,这些内容都是 pb 的,需要经过转换才能读懂,由此就用 Go 写了利用 JSON 伪造 pb 资源和反序列化 pb 打印成人类...阅读全文

博文 2018-09-18 15:34:45 findingea

如何快速提升 Go 程序性能?

快速提升 Go 程序性能的实用技巧,你值得了解一下。作者 | Stephen Whitworth译者 | 弯月,责编 | 屠敏出品 | CSDN(ID:CSDNnews)我对软件性能的话题十分感兴趣。虽然我说不清究竟是为什么。我忍受不了慢吞吞的服务和程序,而且似乎有此种感受的人不止我一个,比如还有Greg Linden:我们尝试过在A/B测试中,将页面的延迟增加100毫秒,结果发现如此微小的延迟也会导致整体性能的大幅下降。——亚马逊,Greg Linden根据我的经验,糟糕的性能通常来自两个方面:小规模时性能还不错,但用户数增长后就无法使用的操作。这类操作通常是O(N)或O(N²)。当用户基数小时,它们的性能还可以接受,所以经常在将产品推向市场阶段使用。随着用户基数的增长,这类操作会出现越来...阅读全文

博文 2019-06-27 10:59:15 CSDN

请教一个protobuf的反序列化问题.

我拿到了一个 proto的名称 和 序列化后的数组. 如何反序列化出来. 例如 name := "proto.HeartBeatReq" byf :=[] ........ 如何创建一个 name 对应的对象,然后反序列化. 相当于实现一个函数 ``` func ToObj(name sring , buf []Byte) message{ // how to write this function } ``` Unmarshal 方法会用,但是需要一个具体对象作为参数. 在go 中该如何创建该对象. c++ 中是可以做到的. 例如 ``` google::protobuf::Message* message =...阅读全文

proto3默认值与可选项

proto3默认值与可选项 来源: kaelzhang81.github.io 内容简介:proto3默认值与可选项 本文转载自:http://kaelzhang81.github.io/2017/05/15/proto3默认值与可选项/?utm_source=tuicool&utm_medium=referral,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。 proto3默认值与可选项 背景介绍 目前开发的产品架构采用微服务架构,微服务之间通信的消息格式则使用的proto3标准协议格式。 proto介绍 全称Protocol Buffers(下面简称PB)是Google公司开发的一种数据描述语言,是一种类似 XML 但更灵活和高效的结构化数据存储格式,可用于结构化数据的序...阅读全文

博文 2020-05-09 16:35:04 XBruce

抽象工厂模式

一、模式的定义与特点 抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无需指定所要产品的具体类就能得到同族的不同等级的产品的模式结构 二、模式的结构与实现 1、模式的结构 抽象工厂(Abstract Factory) 提供了创建产品的接口,它包含多个创建产品的方法newProduct(),可以创建多个不同等级的产品 具体工厂(Concrete Factory) 实现抽象工厂中的多个抽象方法,完成具体产品的创建 抽象产品(Product) 定了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品 具体产品(Concrete Product) 实现了抽象产品角色多定义的接口,由具体工厂来创建,它同具体工厂之间是多...阅读全文

博文 2019-05-15 23:34:53 简书帅气的昵称已被使用

Golang方法和接口

在编程语言中,方法和函数的概念需要搞清楚。函数指的是一个封装的代码块,我们可以直接调用它,并返回结果。而方法其实也是一种函数,只不过方法需要和某个对象绑定。Golang并没有类的概念,不过仍然有方法和接口这些概念。 方法 方法接收者 方法接收者是一个特殊参数,给函数指定了这个参数之后,函数就成为方法了。这个特性有点像Kotlin和C#中的扩展方法,定义了带有接收者的方法之后,接收者这个类型就好像定义了这个方法一样,我们可以直接在该类型上调用方法。这在功能上,和面向对象的概念是很类似的。 例如下面这样,定义了一个汽车结构,然后定义了一个接受者方法。然后就可以用面向对象的方式来调用这个方法了。 func Method() { //方法接收者 car := Car{id: 1} car.beep(...阅读全文

博文 2017-08-03 13:05:04 乐百川

GO获取api 接口json格式数据代码

1.接口数据格式;{ "code": 0, "isAdmin": true, "data": [{ "id": 2, "ip": "192.168.54.12", "desc": "nginx", "owner": "lops01" }, { "id": 5, "ip": "192.168.77.237", "desc": "运维测试", "owner": "ops02" }, { "id": 6, "ip": "192.168.77.82", "desc": "运维管理", "owner": "ops03" }, { "id": 8, "ip": "192.168.79.230", "desc": "服务台测试", "owner": "ops04" }, { "id": 9, "ip": ...阅读全文

博文 2019-06-14 19:03:10 breaklinux

小猿圈Python配置gRPC环境

现在学习Python的同学有没有遇到过一些问题?有没有问题不知道怎么去解决呢?下面小猿圈Python讲师每天为你讲解一个知识点,今天讲解的是Python配置gRPC环境,希望对你有所帮助。 gRPC是一款高性能、开源的RPC框架,产自Google,基于ProtoBuf序列化协议进行开发,支持多种语言(Golang、Python、Java等)。gRPC 的安装:$ pip install grpcio安装ProtoBuf 相关的python 依赖库:$ pip install protobuf安装python grpc的protobuf 编译工具:$ pip install grpcio-tools测试: //源码路径 https://github.com/grpc/grpcgit clone...阅读全文

博文 2019-05-31 15:34:52 小霞_2d43

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

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

博文 2019-05-19 23:12:23 wangshizebin

工厂方法模式

一、模式的定义与特点 工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子类工厂类中 工厂方法模式的主要优点 调用发只需要知道具体工厂的名称,无需知道产品的具体创建过程 增加新的产品时只需要添加具体产品类和对应的具体工厂类,无需对原工厂进行任何修改 二、模式的结构和实现 工厂方法模式由抽象工厂、具体工厂、抽象产品和具体产品等4个要素构成 模式的实现 package FactoryMethod; public class AbstractFactoryTest { public static void main(String[] args) { try { Product a; AbstractFactory af; af=(A...阅读全文

博文 2019-05-14 00:34:52 简书帅气的昵称已被使用

Protobuf语法全解析

Protocol Buffers(protobuf)是一种语言无关,平台无关,可扩展的用于序列化结构化数据的方式——类似XML,但比XML更灵活,更高效。虽然平常工作中经常用到protobuf,但很多时候只是停留在基本语法的使用上,很多高级特性和语法还掌握不全,在阅读一些开源proto库的时候,总会看到一些平常没有使用过的语法,影响理解。 本文基于Go语言,总结了所有的proto3常用和不常用的语法和示例,助你全面掌握protobuf语法,加深理解,扫清源码阅读障碍。 Quick Start 使用protobuf语法编写xxx.proto文件,然后将其编译成可供特定语言识别和使用的代码文件,供程序调用,这是protobuf的基本工作原理。 以Go语言为例,使用官方提供的编译器会将xxx.pr...阅读全文

博文 2020-05-05 00:34:18 水立方

Go语言开发(十一)、Go语言常用标准库一

Go语言开发(十一)、Go语言常用标准库一 一、log 1、log模块简介 Go语言中log模块用于在程序中输出日志。log模块提供了三类日志输出接口,Print、Fatal和Panic。Print是普通输出;Fatal是在执行完Print后,执行 os.Exit(1);Panic是在执行完Print后调用panic()方法。log模块对每一类接口其提供了3中调用方式,分别是"Xxxx、 Xxxxln、Xxxxf"。 2、log.Print接口 log.Print类接口包括log.Print、log.Println、log.Printf,接口如下: // Printf calls l.Output to print to the logger. // Arguments are handle...阅读全文

博文 2018-10-07 21:35:10 天山老妖S

Go语言入门【四】:源码学习-io

介绍 package io主要包含以下文件: io.go 基础的io操作,如读写,较底层 multi.go 多个Reader封装成一个 pipe.go ioutil 常用操作 ioutil.go 封装了ioutil tempfile.go 有关创建临时文件 Reader & Writer 这两个接口是用途最广的接口之一,所以重点学习一下,后续会用在os,net等各种常用包。 io.Reader type Reader interface { Read(p []byte) (n int, err error) } io.Writer type Writer interface { Write(p []byte) (n int, err error) } 具体例子,以strings.Reader...阅读全文

博文 2017-03-05 19:37:11 知米丶无忌

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

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

博文 2019-08-28 17:32:47 SpikeQin

微服务为什么一定要用docker?阿里架构师带你彻底了解docker

早在2013年的时候,docker就已经发行,然而那会还是很少人了解docker。一直到2014年,Martin Fowler提出了微服务的概念,两个不相干的技术终于走在了一起,创造了今天的辉煌​什么是DockerDocker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口Docker有什么用?docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。1.不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很...阅读全文

博文 2019-07-25 13:30:20 wyygxly

golang第四天

测试代码 hello.go package main import ( "net/http" "fmt" //"log" "os" "time" "sort" "log" "io/ioutil" "encoding/json" ) /** * 计数器 */ type Counter struct { n int } /** * 实现Handler接口中的ServeHTTP方法 */ func (c *Counter) ServeHTTP(w http.ResponseWriter, req *http.Request) { c.n++ fmt.Fprintf(w, "counter=%d\n", c.n) //请求返回的数据 } /** * json 结构体某字段的首字母为小写则不可导出 *...阅读全文

博文 2019-03-02 02:34:43 陌生人的头像

简单聊聊VPC和SDN/NFV

摘要: 近几年,SDN和NFV是网络界的热点,那么阿里云是如何做SDN和NFV的呢?阿里云VPC又是如何实现的呢?和SDN和NFV是什么关系呢?本文将介绍相关内容。 注:本文部分内容来自网络搜索的整合 大家都知道,目前各大云服务商都提供了VPC(Virtual Private Cloud)产品,VPC已经成为用户使用云首先需要考虑的云产品,甚至是比ECS更早需要考虑的云产品,可以说是基础中的基础。首先,我们还是来简单介绍下什么是VPC?VPC又有什么好处?再来讨论我们今天的主题,即阿里云VPC和SDN及NFV的关系。 什么是VPC 可以从下面三点来理解VPC。 首先,VPC可以认为是一个网络容器。用户可以免费开通这个容器,开通后再在这个容器中...阅读全文

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 多维哈希(map,hashmap)使用心得

有些场景使用多维哈希来存储数据,很简单粗暴好用。这里记录一下。 如下是三维哈希的简单示意图,建议层数不要太多,否则时间久了,自己写的代码都不认识。 下图是三维哈希在内存的存储形式,hashmap嵌套了3层。图里一层数组存放hashcode和链表头节点指针,每个节点里面都存放一个数组,数组存放下一层hashcode和下一层链表指针。(抱歉没有将哈希分桶链表完整画出来,本图重点是哈希嵌套) 这个数据结构我是用来解析保存不同设备的配置,每个设备有两个配置文件。当新来一个该设备的数据(base64加密后的json序列化字符串),通过这个三维哈希层层解析,返回给用户直观的表象。这里不谈业务,只谈如何暴力存,暴力解。 /******************************************...阅读全文

博文 2018-08-29 18:30:00 brave-xin

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 17:30:00 cheungxiongwei

Redis常用五大数据类型

1.String(字符串) string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M 2.Hash(哈希) Redis hash 是一个键值对集合。 Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。 类似Java里面的Map 3.List(列表) Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。 它的底层实际是个链表 4.Set(集合) Redis...阅读全文

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

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

博文 2017-07-29 17:05:16 nadass

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

阿里云效团队大规模代码构建技术实践

摘要: Vega是一种大数据可视化的高效工具,本文以分析游隼的迁徙情况为例,展示了Vega工具的强大能力及易学易用特点。 目前我们处于信息时代,万物联网的时代已经到来。从我们的日常生活中可以发现,小到身边的智能家居,再到平时出行的共享单车、滴滴等打车软件等,无时无刻不在产生大量的数据。这几年的时间里产生的数据量,已经远远超过了历史上其它时间的总和。那么这么多的数据汇聚成一个大数据,如何对这些数据进行有效分析与加以利用就变得十分重要了,而大数据可视化是进行大数据分析的一把利器。 什么是大数据可视化呢,参考一些资料给出的定义如下,现代的数据可视化(Data Visualization)技术指的是运用计算机图形学和图像处理技术,将数据换为图形或图像在屏幕上显示出来,并进行交互处...阅读全文

兄弟连区块链技术培训Fabric 1.0源代码分析(34) Peer #peer chaincode命令及子命令实现

兄弟连区块链技术培训Fabric 1.0源代码分析(34) Peer #peer chaincode命令及子命令实现# Fabric 1.0源代码笔记 之 Peer #peer chaincode命令及子命令实现## 1、peer chaincode install子命令实现(安装链码)### 1.0、peer chaincode install子命令概述peer chaincode install,将链码的源码和环境封装为一个链码安装打包文件,并传输到背书节点。peer chaincode install支持如下两种方式:* 指定代码方式,peer chaincode install -n <链码名称> -v <链码版本> -p <链码路径>* 基于链码打包文件方式,peer chainc...阅读全文

博文 2018-07-23 15:34:59 Delete_88c3

Go slice和arry的区别

最近踩了一个go的坑,而这个坑的根本原因就是slice和arry的区别理解不清楚导致的。 一、问题提出,slice在被复制之后,修改复制之后的那个slice内容,结果复制之前的slice内容也变化了。 我们先来看一段代码: package main import ( "fmt" "reflect" ) func main() { var arr [8]int = [8]int{1} var arr1 [8]int var slice, slice1 []int fmt.Println("type of:", reflect.TypeOf(arr), reflect.TypeOf(slice)) arr1 = arr fmt.Println("1: arr|arr1 of:", arr, ar...阅读全文

博文 2020-05-14 09:17:00 ZhDavis

Go语言微服务介绍及理论基础

Go微服务理论基础介绍 蓝图概述 下图是我们整个系列文章中构建的系统蓝图整体视图。然而,我们将从头开始写我们的第一个Go微服务,然后当我们沿着博客系列的各部分进展时,我们将会越来越接近下面的图所代表的结构。 图例基本如下: 虚线白框: 在一个或多个节点上运行的逻辑Docker Swarm集群。 蓝色框: 来自Spring Cloud/Netflix OSS栈或其他服务例如Zipkin的支持服务。 沙色/白盒: 实际的微服务。 它或多或少和Magnus Larssons微服务博客系列中使用的蓝图相同,主要区别在于实际微服务是使用Go嵌入Java来实现的。qutoes-service是一个例外,它为我们提供了基于JVM的微服务, 我们可以用于和我们的基于Go的微服务的无缝集成对比以及测试平台。 ...阅读全文

博文 2018-05-17 02:34:38 WalkerQiao

Go语言的JSON输入(解码)(反序列化)之struct存储

// code_031_json_unmarshal project main.go package main import ( "encoding/json" "fmt" ) //可以使用json.Unmarshal()函数将JSON格式的文本解码为Go里面预期的数据结构。 //json.Unmarshal()函数的原型如下: // func Unmarshal(data []byte, v interface{}) error // 该函数的第一个参数是输入,即JSON格式的文本(比特序列) // 第二个参数表示目标输出容器,用于存放解码后的值。 type IT struct { Company string `json:"company"` Subject []string `json...阅读全文

博文 2018-10-07 14:35:12 ck_god

DjanFey的基础库解读--io包(pipe.go)

// Pipe适配器是用来连接期望一个io.Reader的代码和期望一个io.Writer的代码 package my_io import ( "errors" "sync" ) // onceError是一个只会存储一次错误的对象 type onceError struct { sync.Mutex //解析见下面 err error } func (a *onceError) Store(err error) { a.Lock() defer a.Unlock() if a.err!=nil{ return } a.err=err } func (a *onceError) Load() error { a.Lock() defer a.Unlock() return a.err } /...阅读全文

博文 2020-03-10 11:34:25 DjanFy

【翻译】Hyperledger Fabric v1.1 中的系统链码

Hyperledger Fabric 交易流 Hyperledger Fabric v1.1提供了几个特殊的链码来执行某些特殊的任务,这些链码被称为系统链码 (System Chaincode)。本文的目的是简述这些链码的实现、功能和用法。与用户链码类似,系统链码也实现了 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/q...阅读全文

博文 2018-08-09 17:35:02 John_Xuxu

Beego 公共方法返回JSON

容我废话一会,懒得看直接看正文 最近没事想写个blog学习一下go,发现了beego这个框架真的非常像PHP中的thinkphp框架,上手很简单的样子,于是简单看了看文档介绍什么的就开始写了,后台用vue-admin-template,然后beego写api,平时写原生PHP习惯了,都会封装公共方法Error()/Success() 什么的返回json,突然发现beego文档里只写了控制器返回json,而且比较麻烦 this.Data["json"] = json this.ServeJSON() 于是,像往常一样,想做个公共文件,用来存放公共方法,开始还写了一个common包,然后发现不知道该怎么引controller中的方法进行输出,后来就想到了公共控制器这种,于是实现了下面的这种方法。...阅读全文

博文 2020-02-12 07:32:55 Mr_dreamer

gocron入门笔记

背景 最近在开发过程中,感觉到管理在不同机器上的管理不同定时任务有点麻烦,于是想集中化管理定时任务。经过一番调研,选择了gocron-定时任务管理系统。 介绍 github地址:https://github.com/ouqiang/go... 优势:基于go语言开发的一款轻量级定时任务集中调度和管理系统,性能高,页面操作也很简单。 安装 安装过程比较简单,github项目里有介绍,一步步来基本不会有问题。这里概括下几个点: 需要下载 gocron 和 gocron-node 两个包 gocron是web配置平台 ,监听5920端口;gocron-node 是想要执行的任务节点服务器部署的程序,监听5921端口 Supervisor管理 使用supervisor管理,保证进程的稳定运行。sup...阅读全文

博文 2019-11-16 14:02:38 pikalu

golang手把手实现tcp内网穿透代理(2)

上一篇文章明确了我们需要做的东西,接下来就是实现具体功能 定义数据模型 首先是协议的定义,服务端和客户端需要一套协议来交互 协议的内容包括了,livecheck,以及发起tcp连接建立的请求,和响应的对象 假设内网里面需要暴露到外网的端口是5050,那么客户端需要请求服务端在外网建立一个端口,同时服务端需要知道内网被代理的端口是多少。 是因为当外网端口接收到tcp请求的时候,服务端也是需要下发请求到客户端要求客户端建立到被代理端口的连接的。 那么使用什么文本格式呢?首先考虑使用大家都知道的比较简单的,那就是json格式了。 既然使用的文本格式是json,那么需要了解golang下怎么使用json的序列化和反序列化一个对象。 下面开始结构体的定义: 新建一个model.go文件,用来放客户端和...阅读全文

博文 2019-06-17 00:32:40 iamdev

以太坊源码剖析(1)-RLP编码

前言 RLP(Recursive Length Prefix,递归长度前缀)是一种编码算法,用于编码任意的嵌套结构的二进制数据,它是以太坊中数据序列化/反序列化的主要方法,区块、交易等数据结构在持久化时会先经过RLP编码后再存储到数据库中,RLP编码的定义只处理两类数据:一类是字符串(例如字节数组),一类是列表。 RLP与JSON的比较 话不多说,直接上代码 package main import ( "encoding/json" "fmt" "rlp" ) type Pig struct { Name string Gender uint8 Address string } func main() { pig := &Pig{Name: "piggy", Gender: 2, Addre...阅读全文

dubbo-go 的开发、设计与功能介绍

dubbo-go 的前世今生dubbo-go 是目前 Dubbo 多语言生态最火热的项目。dubbo-go 最早的版本应该要追溯到 2016 年,由社区于雨同学编写 dubbo-go 的初版。当时很多东西没有现成的轮子,如 Go 语言没有像 netty 一样的基于事件的网络处理引擎、 hessian2 协议没有 Go 语言版本实现,加上当时 Dubbo 也没有开始重新维护。所以从协议库到网络引擎,再到上层 dubbo-go ,其实都是从零开始写的。在 2018 年,携程开始做 Go 语言的一些中间件以搭建内部的 Go 语言生态,需要有一个 Go 的服务框架可以与携程的现有 dubbo soa 生态互通。所以由我负责重构了 dubbo-go 并开源出这个版本。当时调研了很多开源的 Go 语言服...阅读全文

golang下的并发、并行优化

GO语言是非常适合高并发场景的,那么,业务系统具体会遇到哪些高并发的场景呢?该如何考虑性能开销呢?那么本文就笔者在业务系统常常遇到的问题来抛砖引玉~请求合并 这是什么场景呢?回源!回源DB,二进制流回源源站等等~高并发的场景下,大量用户访问同一个对象,那么做请求合并可以节省非常可观的资源,singleflight~当然这是进程内的用法。批量协议好像和请求合并有点像?不太一样。比较经典的case就是redis的pipeline。能批量就批量,减少太多的封包解包,减少cpu和带宽~merge请求额~~merge什么?比如一个视频id更新计数,那么9->18->25......对了,计数从1涨到100,难道我要写100次db吗?很明显,可以内存里merge~~并行请求这个用法在网关服务就非常常见啦...阅读全文

博文 2018-12-06 16:34:48 imnx

微服务漫游指南(一)

最近几年“微服务”这个词可谓是非常的火爆,大有席卷天下的态势。几乎所有公司都在按照自己的理解实施微服务,大公司也在逐步地把自己庞大的代码库通过一定的策略逐步拆分成微服务。不过如果你在Google上搜一下,你会发现“微服务”这个名词很难有一个明确的定义,不同的人,不同的业务,不同的架构,他们在不同的维度聊“微服务”。 不过总的来说,大家都比较认同的是:“微服务”的核心是把一个大的系统拆解成一系列功能单一的小系统,每个系统可以单独进行部署。这样的好处是显而易见的: 由于单一职责,每个微服务的开发测试会更简单 开发语言和技术方案不受限制,可以发挥不同团队的特长 故障可以控制在单个系统之中 “服务化”使得复用更加便捷 如果要一一列举,还能列举很多很多的优点。总之,微服务看起来还是非常美好的。但是随着...阅读全文

博文 2018-11-03 01:34:46 suoga

Golang 中使用 JSON 的小技巧

目录 [−] 临时忽略struct空字段临时添加额外的字段临时粘合两个struct一个json切分成两个struct临时改名struct的字段用字符串传递数字容忍字符串和数字互转容忍空数组作为对象使用 MarshalJSON支持time.Time使用 RegisterTypeEncoder支持time.Time使用 MarshalText支持非字符串作为key的map使用 json.RawMessage使用 json.Number统一更改字段的命名风格使用私有的字段忽略掉一些字段忽略掉一些字段2 taowen是json-iterator的作者。 序列化和反序列化需要处理JSON和struct的关系,其中会用到一些技巧。 原文 Golang 中使用 JSON 的小技巧是他的经验之谈,介绍了一些...阅读全文

博文 2017-07-08 10:13:03 smallnest

Go socket实现多语言间通信

前言 socket提供了在传输层进行网络编程的方法,它比基于http协议的接口传输更高效,RPC(Remote Procedure Call)是远程过程调用,常用于分布式系统等,而rpc很多是基于socket实现的。不了解socket、http等协议请阅读 https://blog.csdn.net/guyan03...。 Socket 都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。它不局限于某一语言,这里我们主要讲Go、php语言基于socket实现通讯。 序列化采用json,数据格式比较简单,支持多种语言。 Go socket 采用c/s架构 客户端:net.Dial() Write() Read() Close() 服务器:net.Liste...阅读全文

博文 2019-06-27 22:32:39 guyan0319

Golang 基础 XML

本篇只是自己学习过程中的一个记录 首先需要引入xml包 import "encoding/xml" 这里我们先定义一个用于序列化和反序列化的结构用于测试。 type TTest struct { Path string `xml:"path"` Val int `xml:"val"` Name string `xml:"name,attr"` // 属性的也可写作 xml:",attr" attr表示是一个属性值 } 序列化 test := &TTest{"C:\\aaaa", 1111, "xxoo"} b, err := xml.Marshal(test) fmt.Println(string(b), err) 成功后输出: C:\aaa...阅读全文

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

流行的rpc框架benchmark 2018新春版

目录 [−] 本文测试的RPC框架测试场景模拟业务处理时间测试数据测试client测试指标测试环境测试结果处理时间 0ms处理时间 10ms处理时间 30ms 随着公司规模的扩大,以及业务量的激增,单体应用逐步演化为服务/微服务的架构模式, 服务之间的调用大多采用rpc的方式调用,或者消息队列的方式进行解耦。几乎每个大厂都会创建自己的rpc框架,或者基于知名的rpc框架进行改造。 目前, rpc框架主要沿着两条路线发展,一个是目标为了跨语言,服务端可以用不同的语言实现,客户端也可以用不同的语言实现,不同的语言实现的客户端和服务器端可以互相调用。很显然,要支持不同的语言,需要基于那种语言实现相同协议的框架,并且协议设计应该也是跨语言的,其中比较典型的是 grpc,基于同一个IDL,可以生成不同...阅读全文

博文 2018-02-28 10:56:48 smallnest

websocket ( go srv / JS client) 使用flatbuffers 交互 (Fasthttp系列之3)

代码在 github.com/tsingson/fa… 0. 简要说明 为某个开源项目增加 websocket 对接, 写了这个示例 代码中 javascript 对 flatbuffers 的序列化/反序列化, 查了一天资料, 嗯哼, 最终完成了. 看代码吧......... 0.1 关于序列化/反序列化 序列化 serialized / 反序列化 un-serialized , 一般是指对像转成二进制序列( 或叫二进制数组), 以及逆向从二进制转成对像的过程, 一般用在几个地方 网元之间传输. 比如 RESTfull 是在 HTTP 协议( HTML over TCP ) 上进行交互时使用 JSON 数据格式进行序列化与反序列化; 比如 gRPC 默认采用 protobuffers 在 ...阅读全文

博文 2020-01-03 17:34:23 tsingson

区块链在中国(1):IBM HyperLedger fabric

在我看来,比特币就是现实中的V字仇杀队,当然现实是更残酷的世界政府,这场博弈关乎着人类文明、政治、社会属性、经济和人权。 IBM HyperLeger 又叫 fabric,你可以把它想象成一个由全社会来共同维护的一个超级账本,没有中心机构拥揽权力,你的每一笔交易都是全网公开且安全的,信用由全社会共同见证。它与Bitcoin的关系就是,你可以利用fabric构建出一个叫Bitcoin的应用来帮助你change the world。 愿景是那么的牛X,貌似正合我们想改变世界的胃口,但是在残酷的现实和世界面前我们永远是天真幼稚的,blockchain需要一步一步脚印来构建它的宏伟蓝图,起码目前是没有将它用于工业生产和国家经济的案例的。 fabric源于IBM,初衷为了服务于工业生产,IBM将44,...阅读全文

博文 2017-11-29 06:13:06 bluecloudmatrix