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

golang test测试使用

1.创建测试文件夹mysql,文件夹下的go文件的package必须与文件夹名一致(不然会识别不到) 2.创建需要测试的文件mysql.go(使用github.com/go-sql-driver/mysql包) package mysql import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) func findByPk(pk int) int { var num int = 0 db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/plugin_master?charset=utf8") if err != nil { panic(err.Error()) } def...阅读全文

博文 2015-03-06 03:00:16 benlightning

go语言的chan

chan是一个FIFO队列,chan分成两种类型同步和异步同步的chan完成发送者和接受者之间手递手传递元素的过程,必须要求对方的存在才能完成一次发送或接受异步的chan发送和接受都是基于chan的缓存,但当缓存队列填满后,发送者就会进入发送队列, 当缓存队列为空时,接受者就会接入等待队列。 chan的数据结构: struct Hchan { uintgo qcount; // total data in the q uintgo dataqsiz; // size of the circular q uint16 elemsize; uint16 pad; // ensures proper alignment of the buffer that follows Hchan in mem...阅读全文

博文 2015-05-18 03:00:01 richmonkey

分布式事务一致性方案

http://www.infoq.com/cn/articles/solution-of-distributed-system-transaction-consistency 在OLTP系统领域,我们在很多业务场景下都会面临事务一致性方面的需求,例如最经典的Bob给Smith转账的案例。传统的企业开发,系统往往是以单体应用形式存在的,也没有横跨多个数据库。我们通常只需借助开发平台中特有数据访问技术和框架(例如Spring、JDBC、ADO.NET),结合关系型数据库自带的事务管理机制来实现事务性的需求。关系型数据库通常具有ACID特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。而大型互联网平台往往是由一系列分...阅读全文

博文 2017-03-09 05:02:33 jey恒

go-lexer-词法分析

词法分析一般是编译器的第一部分,而且词法分析很简单,就是一个有限状态机.开始词法分析的过程就是把源文件转换成一组预先定义好的token的过程.这一组被统一表现的token之后会被送入语法分析器进行语法解析,这里我们主要关注如何进行词法分析. 做词法分析就几种方法: 直接使用工具比如lex. 使用更低一层的正则表达式. 使用状态动作,构造一个状态机. 而真正实现一个语言的话,使用工具没有什么错,但是问题是,很难获得正确的错误提示.工具生成的错误处理很弱.而且需要学习另一门规则或特定的语法.生成的代码可能性能不好,难以优化,但是用工具可以非常简单实现词法分析.早期编译器的设计阶段都会使用lex来做词法分析器,比如gcc和Go都是这么做的,但是到了后期一个真正生产化的语言可能不能依赖生成的代码,而...阅读全文

博文 2016-04-12 10:32:31 yueyue.gao

[翻译] Go(#golang) 实现的状态机

春节前,粗略研究了一下微信的公共帐号。用 Golang 实现了一个简单的 package wechat,用于接入微信公共帐号。当时就在思考,微信的文字交互过程如果要实现有一定逻辑的复杂过程,可能需要使用到状态机。然后,就看到了这篇文章:《State machines in Go (#golang)》。非常合时宜啊!翻译于此,以飨读者! ——–翻译分隔线——– Go(#golang) 实现的状态机 我已经用 Go 代替 Python 重写了一个关键的服务组件。由于 Python 的解释器不是线程安全的,所以在解析的时候使用了全局锁。Go 与 Python 不同,它内建了并发支持,并且是静态编译的。 首先要实现一个状态机。Python 的版本是基于 David Mertz 的这篇文章。 Mert...阅读全文

博文 2014-10-09 16:18:31 mikespook

Go 1.6将进一步改进垃圾收集器

尽管Go 1.5刚刚发布,仍然相对较新,但是Go团队已经在致力于改进其新的低延迟并发垃圾收集器,希望Go更适合新的应用领域。Google工程师Austin Clements和Rick Hudson如是说。 Go 1.5用新的垃圾收集器代替了原来的STW(stop-the-world) GC,解决了延迟问题。当负载较重时,每50ms,新的GC的活动时间可以控制在10ms以下,从而使Go程序在一般情况下能运行得更快些。在更极端的情况下,停顿可以从300ms降到4ms。 Go 1.6的目标是进一步稳定GC,并在以下几个方面做出改进: 状态协调(State coordination):Go 1.5 GC有个主要瓶颈是从Go 1.4继承来的,源自其集中式的GC协调器(coordinator),这是一个...阅读全文

博文 2015-09-13 14:40:00 臧秀涛

golang信号signal的处理

在实际项目中我们修改了配置文件后,希望在不重启进程的情况下重新加载配置文件,这时候就需要通过信号传递来进行处理了。golang中对信号的处理主要使用os/signal包中的两个方法:一个是notify方法用来监听收到的信号;一个是 stop方法用来取消监听。下面给一个些示例。 监听信号 notify方法原型 func Notify(c chan<- os.Signal, sig ...os.Signal) 第一个参数表示接收信号的管道 第二个及后面的参数表示设置要监听的信号,如果不设置表示监听所有的信号。 package main import ( "fmt" "os" "os/signal" //"syscall" ) func main() { c := make(chan os.Sig...阅读全文

博文 2015-10-14 14:27:22 陈杰斌

Go 语言的 CMS 工具库 Qor

Qor 是基于 Golang 开发的的CMS 一系列工具库,基于 Qor可以快速搭建网站的后台管理系统。 Qor 的工作库包含: 1,后台管理:可以对数据库进去 CURD 管理,支持一对一,一对多,多对多关联关系维护等等 2,支持上传图片到云以及 filesystem,resize、crop 图片等等 3,Publish 发布系统,可以修改数据,并且经过检查后,再发布到正式环境中 4,状态机,可以用于开发工作流的系统 5,I18n,翻译,可以通过在 WEB 界面翻译,并将翻译保存到数据库中 6,L10n,本地化,不同于翻译,他可以针对某个地区来对内容,或者数据结构进行本地化。 7,Roles,权限管理 8,Exchange,通过 Excel,CSV 导入导出数据 9,Wo...阅读全文

Golang: 有限状态自动机

有限状态机 又简称FSM(Finite-State Machine的首字母缩写)。这个在离散数学里学过了,它是计算机领域中被广泛使用的数学概念。是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。编译原理学得好的童鞋应该对FSM不陌生,因为编译器就用了FMS来做词法扫描时的状态转移。 FSM的概念在网上一搜可以搜一大堆出来,但估计您也看不大明白。本文将以不一样的方式来讲述FSM的概念以及实现。 现实生活中,状态是随处可见的,并且通过不同的状态来做不同的事。比如冷了加衣服;饿了吃饭;困了睡觉等。这里的冷了、饿了、困了是三种不同的状态,并且根据这三个状态的转变驱动了不同行为的产生(加衣服、吃饭和睡觉)。 FSM是什么 所谓有限状态机,就是由有限个状态组成的机器。再看上面举到的例子:人...阅读全文

用GO实现的erlang的genfsm.

关于erlang的有限状态机,参考erlang四大behaviour之二-gen_fsm这篇文章。 有限状态机可以用下面这个公式来表达 State(S) x Event(E) -> Actions(A), State(S') 这两天正好空闲,就用golang实现了一下,话不多说,直接上代码 package util import ( "errors" "reflect" "sync" "time" "unicode" "unicode/utf8" "util/log" ) var typeOfError = reflect.TypeOf((*error)(nil)).Elem() type FSM struct { sync.Mutex StopReason string rcvr refl...阅读全文

博文 2015-01-13 12:09:56 sll1983

TCP self-connection

Go 语言的 net 库里有下面这样的一段代码,这段代码是用来发起一个 tcp 连接的,仔细阅读这段代码可以发现代码里处理了一种很不常见的特殊情形,也就是 tcp self-connection。代码中的注释解释得很详细了。 func dialTCP(net string, laddr, raddr *TCPAddr, deadline time.Time) (*TCPConn, error) { fd, err := internetSocket(net, laddr, raddr, deadline, syscall.SOCK_STREAM, 0, "dial", sockaddrToTCP) // TCP has a rarely used mechanism called a 'si...阅读全文

博文 2014-12-21 14:54:33 skoo

sync.Once的实现分析

sync.once可以控制函数只能被调用一次,不能多次重复调用。 我们可以用下面的代码实现一个线程安全的单例模式 ``` package singleton import ( "fmt" "sync" ) type object struct { name string } var once sync.Once var obj *object //单例指针 //公开方法 外包调用 func Instance() *object { once.Do(getObj) return obj } func getObj() { if obj == nil { obj = new(object) //可以做其他初始化事件 } } //单例测试 func (obj *object) Test() { f...阅读全文

博文 2016-06-11 20:17:31 shanks

急招武汉GO语言开发工程师15-25K

急聘武汉地区golang服务器开发工程师15-25K 职位描述: 1、负责后端GO语言TCP协议开发工作 2、与基础架构工程师、运维工程师一起实现稳定、可扩展的后台服务 3、数据驱动,不断通过产品和技术数据进行改进,并完成快速迭代 任职资格: 1、熟悉GO语言,熟悉C++更好 2、熟悉TCP/UDP协议,IM单聊群聊架构,游戏状态机、定时器等 3、熟悉常见的游戏开发算法,网络同步策略等 有意者加QQ:1948977976详聊或直接发简历到1948977976@qq.co...阅读全文

ECUG Con 邀您共议服务端开发最深度实践

![](http://ww4.sinaimg.cn/mw1024/7bb2bde1gw1f061fokhgpj20o00dd40x.jpg ) ECUG 全称为 Effective Cloud User Group (实效云计算用户组),由七牛云 CEO 许式伟于 2007 年发起,集结了一批具有高端视角并仍醉心于技术本身的同仁,共同关注云计算前沿技术的最新成果和分布式开发、运维的最佳实践。在过去的八年中, ECUG 社区每年都会组织一场全国性的 ECUG Con 大会,期间众多技术大神纷纷参与,他们或许在大众技术会议已经鲜少露面,但会在 ECUG Con 畅谈心得,共同奉献一场半公开的高规格技术分享盛会。 ECUG Con 发展历程 ![](http://cdn.huo...阅读全文

go 有限状态机

用Go语言写了一个有限状态机,放在github上,有兴趣的同学可以看看:https://github.com/sharplog/hackberry $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

    ').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.a...阅读全文

博文 2016-01-31 10:00:02 logsharp

Nsq从入门到实践

当nsq跑起来之后, 我们可能会遇到以下问题 分布式部署 处理错误(何时requeue) 如何使用golang lib 抱着不应该只停留在入门的态度, 笔者粗浅的研究了一下这几个问题, 希望也对有同样疑问的人有帮助. 部署 由于NSQ的分布式网络结构, NSQD必须广播(到lookup)自己的地址并让消费者连接, 那么多个NSQD无法做透明负载均衡. 就必须为每一个NSQD分配单独的IP(或host)以保证消费者(在lookup找到NSQ节点)能够正确的连接. 这样部署起来可能会麻烦一些 但问题不大, 注意一下就好. ps: 如果有更好的方法请告诉我, 小弟感激不尽. NSQ Requeue And Backoff 建议结合官方文档来看 requeue(重试) 用于当错误发生, 需要重试时....阅读全文

老司机带你用 Go 语言实现 Raft 分布式一致性协议

老司机带你用 Go 语言实现 Raft 分布式一致性协议   随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。   为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。任何一个分布式系统都无法同时满足 Consistency(一致性),Availability(可用性),Partition tolerance(分区容错性)这三个基本需求,最多只能满足其中两项。 但是,一个分布式系统无论在 CAP 三者之间如何权衡,都无法彻底放弃一致性(Consistency),如果真的放弃一致性,那么就说明这个系统中的数据根本不可信,数据也就没有意义,那么这个系统也就没有任何价值可言。...阅读全文

博文 2017-02-09 06:00:24 chauncy

老司机带你用 Go 语言实现 Paxos 算法

老司机带你用 Go 语言实现 Paxos 算法  在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 一致性(Consistence),等同于所有节点访问同一份最新的数据副本; 可用性(Availability),每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据; 分区容错性(Network partitioning),以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在 C 和 A 之间做出选择。 上车  今天说说一致性,分布式系统中的节点通信存在两种模型:共享内存(Shared mem...阅读全文

博文 2017-03-23 08:36:43 chauncy

golang test测试实例

本文的目的是对mymysql进行单元测试和性能测试 准备工作: 1 go get github.com/ziutek/mymysql/thrsafe 2 在mysql建表和初始化数据(db是test) 1 2 3 4 5 6 7 8 9 10 11 12 drop table if exists admin; CREATE TABLE `admin` ( `adminid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `username` varchar(20) NOT NULL DEFAULT '' COMMENT '后台用户名', `password` char(32) NOT NULL DEFAULT '' COMMENT '密码,md5存', ...阅读全文

博文 2015-06-17 20:17:43 kjfcpua

Golang单例模式

单例模式,是一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。 1. 懒汉模式(Lazy Loading) 懒汉模式是开源项目中使用最多的一种,最大的缺点是非线程安全的 type singleton struct { } // private var instance *singleton // public func GetInstance() *singleton { if instance == nil { instance = &singleton{} // not thread safe } return instance } 2. 带锁的单例模式 type...阅读全文

博文 2017-10-13 10:04:48 iCaptain

go语言协程认识-1

//关于go语言协程通道的使用 //1.通道可以带缓存,也可以不带 //2.不带缓存的,不管是读还是写都会阻塞 //3.带缓存的,如果缓存溢出,就会阻塞 //4.make(chan int,1)和make(chan int)是不一样的,第一种通道内写入两个数据会阻塞,第二种写入就会阻塞 //5.如果协程在阻塞,但是主程已经退出执行,则认为程序死锁 //6.如果程序除了主程之外(没有一个协程),处于阻塞状态,则认为程序死锁 //7.一句话:只有一个协程(可以是主程),在阻塞,认为程序处于死锁 //8.子程序是协程的一种特例,阻塞到子程序执行完毕返回,而协程可能等不到执行完毕就返回,然后条件满足再回来执行 package main import ( "fmt" ) func main() { /...阅读全文

golang esl api

通过ESL 调取FS的状态,比如show calls : 用golang eventsocket 实现 conn, err := eventsocket.Dial("192.168.5.32:8021","ClueCon") if err != nil { this.emitError(so, 413) return "" } ev, _ := conn.Send(fmt.Sprintf("api show calls")) calls := strings.Split(ev.Body, "\n") for i := 1; i < len(calls)-3; i++ { //处理每一条记录 ...阅读全文

博文 2016-01-12 03:00:00 logo-fox

【go共识算法】-PBFT

实用拜占庭容错系统介绍 由来 原始的拜占庭容错系统由于需要展示理论上的可行性而缺乏实用性。另外,算法的复杂度也是随节点的增加而呈指数级增加。实用拜占庭容错系统(Practical Byzantine Fault Tolerance, PBFT)降低了拜占庭协议的运行复杂度,从指数级别降低到多项式级别,使拜占庭协议在分布式系统中应用成为可能。 什么是实用拜占庭容错系统 实用拜占庭容错系统是一类“状态机”拜占庭系统(这里的状态机可以理解为“系统状态”,以区块链记账为例,系统每新增一个区块,账本就更新到一个新的状态。前面讲过,拜占庭容错系统是一个强一致性协议,每次记账后系统都会达成新的状态。),要求系统所有节点共同维护一个状态,所有节点采取的行动一致。 实用拜占庭容错系统需要运行三类基本协议: 一...阅读全文

博文 2018-10-10 17:34:44 jincheng828

一个有特色的有限状态机

gofsm是一个简单、小巧而又特色的有限状态机(FSM)。 github已经有了很几个状态机的实现,比如下面的几个,还为什么要再发明轮子呢? 原因在于这些状态机有一个特点,就是一个状态机维护一个对象的状态,这样一个状态机就和一个具体的图像实例关联在一起,在有些情况下,这没有什么问题,而且是很好的设计,而且比较符合状态机的定义。但是在有些情况下,当我们需要维护成千上百个对象的时候,需要创建成千上百个状态机对象,这其实是很大的浪费,因为在大部分情况下,对象本身自己会维护/保持自己当前的状态,我们只需把对象当前的状态传递给一个共用的状态机就可以了,也就是gofsm本身是“stateless”,本身它包维护一个或者多个对象的状态,所有需要的输入由调用者输入,它只负责状态的转换的逻辑,所以它的实现非常...阅读全文

博文 2017-02-08 12:53:45 smallnest

从Go谈到socket API的一些思考

本文翻译自:https://idea.popcount.org/2017-02-23-socket-api-thoughts/前一段时间,我写了篇关于select()系统调用发展历史的文章。 该文章引发了一些有趣的讨论。文章和讨论花了我不少心思,但我最终明白了什么是核心问题:Unix进程是否是CSP风格的进程? 文件描述符是CSP派生的“通道”吗? “select()”相当于ALT语句吗?直接的答案是“不”。 CSP比Unix更年轻。 正如Tony Garnock-Jones指出的,关于CSP的第一篇文章发表于1978年,文件描述符自从Unix的早期就已经出现。文件描述符不是通道,他们应该是什么? CSP channel通常是可组合的,而我认为Unix的select不是。 这是第二点:使用“...阅读全文

博文 2017-02-28 03:38:17 方圆

Go的单例模式

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 1.Go实现非线程安全的单例模式(懒汉 就是很懒的单例 哈哈): package singleton type singleton struct { } var instance *singleton func GetInstance() *singleton { if instance == nil { instance = &singleton{} // <--- NOT THREAD SAFE } return instance ...阅读全文

博文 2017-02-10 12:24:07 谢权

go-raft实现

说明 -- goraft是Raft协议的Golang版本的实现,项目地址为: goraft/raft ( http://link.zhihu.com/?target=https%3A//github.com/goraft/raft ) 。整个代码质量较高,值得仔细品味。因此,整理了该博文探究下其内部实现。 数据结构 goraft主要抽象了server、peer和log三个结构,分别代表服务节点、Follower节点和日志。 *server* Raft作为一种多节点状态一致性维护协议,运行过程中必然涉及到多个物理节点,server就是用来抽象其中的每个节点,维护节点的状态信息。其结构如下: type server struct { *eventDispatcher name string pa...阅读全文

博文 2017-09-09 14:19:26 丁凯

深入浅出 Raft - 基本概念

引子 因为一直在跟 Raft 打交道,虽然对 Raft 很熟悉了,但如果你要我去给一个完全不知道什么是 Raft 的人讲 Raft,我觉得难度还是非常大的。所以我决定使用我一贯罗里吧嗦,用比喻和讲故事的方式,来尝试说说 Raft。 如果你跟你孩子一起看过小猪佩奇,你大概就能知道我为啥用了这么怪的取名。如果没看过的,强烈推荐你去看看,这真的是一部很不错的儿童动画。 日志和状态机 兔小姐准备在泥坑小镇成立一家银行(就叫泥坑银行吧)。对于银行储蓄系统的设计,兔小姐找来了猪爸爸。 兔小姐:『猪爸爸,我们要保证,无论怎样用户的金钱不能有错误。假如客户存了 100 块钱,那么他的账户就会多出来 100 块钱,不会是 101,也不会是 99。』 猪爸爸:『好的,兔小姐,我觉得我们可以这样。如果一个客户来存...阅读全文

博文 2017-10-16 02:43:35 siddontang

Mirai源码解析

Mirai概述 mirai,2016年一个备受关注的DDoS攻击程序,与传统的僵尸网络不同的是,mirai的控制的僵尸主要是摄像头等嵌入式设备,mirai的出现将一大波安全研究者引入了IoT安全领域。 mirai的事迹主要有: 2016.9.20 ,攻击Brian Krebs个人网站,攻击流量达到665Gbps,据称有150万僵尸发起攻击。 2016.9.21, 攻击法国网络服务商OVH,攻击流量达到1Tbps 2016.9.30,mirai开源 2016.10.21, 攻击Dyn DNS,导致Github、Twitter等美国大半个互联网下线 2016.11.28, 攻击德国电信,mirai出现新变种 mirai已经成为IoT DDOS攻击的母体。 mirai能够控制如此大规模的僵尸网络,...阅读全文

博文 2017-07-12 09:07:07 zengfan

Go语言的测试

之前看过一本书,说:“凡大神都是先写好单元测试用例,才去写代码的”。我一直都记在心里。今天终于有空,就看了看Golang的测试包testing。 谢大的书和Golang官方的文档讲的差不多,Golang提供了两个测试方式:用例测试和压力测试。 ###1. 用例测试 用例测试的规则我是复制谢大的: 文件名必须是_test.go结尾的,这样在执行go test的时候才会执行到相应的代码 你必须import testing这个包 所有的测试用例函数必须是Test开头 测试用例会按照源代码中写的顺序依次执行 测试函数TestXxx()的参数是testing.T,我们可以使用该类型来记录错误或者是测试状态 测试格式:func TestXxx (t *testing.T),Xxx部分可以为任意的字母数字...阅读全文

老司机带你用 Go 语言实现 Raft 分布式一致性协议

老司机带你用 Go 语言实现 Raft 分布式一致性协议  随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。   为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。任何一个分布式系统都无法同时满足 Consistency(一致性),Availability(可用性),Partition tolerance(分区容错性)这三个基本需求,最多只能满足其中两项。 但是,一个分布式系统无论在 CAP 三者之间如何权衡,都无法彻底放弃一致性(Consistency),如果真的放弃一致性,那么就说明这个系统中的数据根本不可信,数据也就没有意义,那么这个系统也就没有任何价值可言。所...阅读全文

博文 2017-03-23 08:20:49 chauncy

etcd 非关系数据库 简介

1.什么是etcd服务etcd是一个采用HTTP协议的健/值对存储系统,它是一个分布式和功能层次配置系统,可用于构建服务发现系统。用于共享配置和服务发现的分布式,一致性的KV存储系统.其很容易部署、安装和使用,提供了可靠的数据持久化特性。它是安全的并且文档也十分齐全。ETCD该项目目前最新稳定版本为3.3.9 具体信息请参考[项目首页]和[Github]。ETCD是CoreOS公司发起的一个开源项目,授权协议为Apache.提供配置共享和服务发现的系统比较多,其中最为大家熟知的是Zookeeper,而ETCD可以算得上是后起之秀了。在项目实现,一致性协议易理解性,运维,安全等多个维度上,ETCD相比Zookeeper都占据优势2.Zookeeper和etcd的区别:1)一致性协议: ETCD...阅读全文

博文 2018-08-21 15:35:16 宇晨棒棒的

Go hdu 4158 hoj 简单搜索

/*搜索中状态加入队列时就要立即更新标志, 不能出队的时候更新,否则中间有部分状态会重复搜索造成错误。*/ #include #include #include #include using namespace std; int map[21][21]; bool vis[21][21]; int dx[4]= {1,-1,0,0}; int dy[4]= {0,0,-1,1}; int cb,cw,n; struct point { int x,y; }p,t; void bfs(int x,int y) { p.x=x,p.y=y; queue q; q.push(p); int num=0; ...阅读全文

博文 2016-01-31 07:00:00 ehi11

channel数据结构

channel是go语言的一大特色,使用原子函数还是使用互斥锁都不如使用channel来的简单,go语言中的channel可以作为函数参数传递和返回值返回,通过发送和接受数据在goroutine之间同步(在学习和使用go语言的时候,我们应该牢记,go语言中所有的结构都是值拷贝的) 本文不对channel使用作讲解,直接上 *酸(dai)菜(ma)* : type hchan struct { qcount uint //队列数据总的数据数量 dataqsiz uint //环形队列的数据大小 buf unsafe.Pointer //指向dataqsiz元素类型大小的数组 elemsize uint16 closed uint32 elemtype *_type // 元素类型 sendx ...阅读全文

go并发编程(一)——进程

# 进程 # ##1.定义 ## 所有代码都是在进程中执行的,我们通常把一个程序的执行称为一个进程。反过来说,进程用来描述程序的执行过程。因此,程序和进程成为了一对相依相靠的概念,他们分别描述了一个程序的静态形式和动态特征。除此之外,进程还是操作系统进行资源分配的一个基本单位。 ## 2.衍生 ## 父进程 子进程 ## 3.进程标识 pid## 进程的优先级和状态,虚拟地址以及各种访问权限等等这些详细数据都保存在进程描述符中。其中,进程描述符中保存的pid是进程在操作系统中的唯一标识。pid为非负整数且顺序的编号,pid可以被重复利用,当进程id已达到最大值,内核会从头查找闲置的进程id并使用最先找到的哪一个作为新进程的id。另外描述符中还会包含当前进程的父进程的id(常被称为PPID) ...阅读全文

博文 2018-05-10 15:10:57 yinshidaoshi

有限状态机FSM的原理与GO的实现

有限状态机(Finite-state machine, 简写FSM)又可以称作有限状态自动机。它必须是可以附着在某种事物上的,且该事物的状态是有限的,通过某些触发事件,会让其状态发生转换。为此,有限状态机就是描述这些有限的状态和触发事件及转换行为的数学模型。 有限状态机组成 有限状态机有两个必要的特点,一是离散的,二是有限的。基于这两点,现实世界上绝大多数事物因为复杂的状态而无法用有限状态机表示。 而描述事物的有限状态机模型的元素由以下组成: 状态(State):事物的状态,包括初始状态和所有事件触发后的状态 事件(Event):触发状态变化或者保持原状态的事件 行为或转换(Action/Transition):执行状态转换的过程 检测器(Guard):检测某种状态要转换成另一种状态的条件是...阅读全文

博文 2017-07-24 02:13:43 陈康stozen

以太坊源码分析—账户的管理

前言 以太坊是一个巨大的状态机,在网络中,每一个全节点都保存着以太坊状态机的全部历史,只要愿意,我们可以查询到任何时刻的状态(黄皮书中 World State),其中账户状态便是其中的一部分,这部分功能由主要由state包提供 基本概念 账户地址 在以太坊中,无论是外部账户还是合约账户,都以一个160bit的数组表示地址,它是由特定椭圆曲线上的一个点表示的公钥经过Keccak Hash算法截取而来。 外部账户和合约账户的区别 账户内容 以太坊中,账户用 Account 表示 type Account struct { Nonce uint64 Balance *big.Int Root common.Hash CodeHash []byte } Nonce:账户发起交易的次数 Balance...阅读全文

博文 2018-11-13 19:34:40 187J3X1

拜占庭容错系统简介

拜占庭容错系统简介 原始的拜占庭容错系统由于需要展示理论上的可行性而缺乏实用性。另外,算法的复杂度也是随节点的增加而呈指数级增加。实用拜占庭容错系统(Practical Byzantine Fault Tolerance, PBFT)降低了拜占庭协议的运行复杂度,从指数级别降低到多项式级别,使拜占庭协议在分布式系统中应用成为可能。 什么是实用拜占庭容错系统 实用拜占庭容错系统是一类“状态机”拜占庭系统(这里的状态机可以理解为“系统状态”,以区块链记账为例,系统每新增一个区块,账本就更新到一个新的状态。前面讲过,拜占庭容错系统是一个强一致性协议,每次记账后系统都会达成新的状态。),要求系统所有节点共同维护一个状态,所有节点采取的行动一致。 实用拜占庭容错系统需要运行三类基本协议: 一致性协议:...阅读全文

博文 2018-08-06 11:34:52 kakushao

开源区块链Tendermint开发详解

简介 tendermint是一个开源的完整的区块链实现,可以用于公链或联盟链,其官方定位 是面向开发者的区块链共识引擎: 与其他区块链平台例如以太坊或者EOS相比,tendermint最大的特点是其差异化的定位: 尽管包含了区块链的完整实现,但它却是以SDK的形式将这些核心功能提供出来,供开发者 方便地定制自己的专有区块链: tendermint的SDK中包含了构造一个区块链节点旳绝大部分组件,例如加密算法、共识算法、 区块链存储、RPC接口、P2P通信等等,开发人员只需要根据其应用开发接口 (Application Blockchain Communication Interface)的要求实现自己 的应用即可。 ABCI是开发语言无关的,开发人员可以使用自己喜欢的任何语言来开发基于ten...阅读全文

博文 2018-11-05 10:34:41 malakashi

【go共识算法】-Raft

介绍 Raft 状态 一个 Raft 集群包含若干个服务器节点;通常是 5 个,这允许整个系统容忍 2 个节点的失效,每个节点处于以下三种状态之一: follower :所有结点都以 follower 的状态开始。如果没收到 leader消息则会变成 candidate状态。 candidate:会向其他结点“拉选票”,如果得到大部分的票则成为leader。这个过程就叫做Leader选举(Leader Election)。 leader:所有对系统的修改都会先经过leader。 Raft 一致性算法 Raft通过选出一个leader来简化日志副本的管理,例如,日志项(log entry)只允许从leader流向follower。 基于leader的方法,Raft算法可以分解成三个子问题: L...阅读全文

博文 2018-10-10 20:34:39 jincheng828

C和Go相互调用

C可以调用Go,并且Go可以调用C, 如果更进一步呢, C-->Go-->C 或者 Go-->C-->Go的调用如何实现? 本文通过两个简单的例子帮助你了解这两种复杂的调用关系。本文不涉及两者之间的复杂的数据转换,官方文章C? Go? Cgo!、wiki/cgo和cmd/cgo有一些介绍。 Go-->C-->Go Go程序调用C实现的函数,然后C实现的函数又调用Go实现的函数。 1、首先,我们新建一个hello.go的文件: hello.go123456789package mainimport "C"import "fmt"//export HelloFromGofunc HelloFromGo() { fmt.Printf("Hello from Go!\n")} 它定义了一个Hello...阅读全文

博文 2018-09-02 22:17:10 smallnest

go并发编程笔记

go语言高级编程笔记 并发编程 一、并发编程的相关概念 1、并发编程概念:使多个任务【程序】可以在同一时间执行以便能够更快的得到结果 2、多元程序:允许操作系统同时运行多个程序,cpu来回切换,缺点:对系统资源进行无限制的抢夺造成程序频繁发生死锁现象 3、串行程序:只能被顺序执行的指令列表 4、并行程序:可以在并行的硬件上执行的并发程序 5、并发程序:被并发的执行的两个或两个以上的串行程序的统称 6、并发系统 7、并发程序的不确定性:没有明确的执行顺序 8、并发程序的内部交互 同步的原则:某个资源同一时刻只能被一个程序占用 同步的作用:避免在并发访问共享资源时可能存在的冲突,以及确保在互相传递数据时能够顺利的接通 二、多进程编程 1、IPC:多进程程序中,程序之间需要互相协作完成任务,而多个...阅读全文

兄弟连区块链入门教程以太坊源码分析p2p-dial.go源码分析

dial.go在p2p里面主要负责建立链接的部分工作。 比如发现建立链接的节点。 与节点建立链接。 通过discover来查找指定节点的地址。等功能。dial.go里面利用一个dailstate的数据结构来存储中间状态,是dial功能里面的核心数据结构。 // dialstate schedules dials and discovery lookups. // it get's a chance to compute new tasks on every iteration // of the main loop in Server.run. type dialstate struct { maxDynDials int //最大的动态节点链接数量 ntab discoverTable /...阅读全文

博文 2018-10-25 16:34:43 兄弟连区块链培训

兄弟连区块链入门教程以太坊源码分析fast sync算法一

区块链入门教程以太坊源码分析fast sync算法一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。this PR aggregates a lot of small modifications to core, trie, eth and other packages to collectively implement the eth/63 fast synchronization algorithm. In short, geth --fast.这个提交请求包含了对core,trie,eth和其他一些package的微小的修改,来共同实现eth/63的快速...阅读全文

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

Bytom设计结构解读

一、引文 设计Bytom 数据结构,组合了许多技术点,如 patricia tree,utxo, bvm, account model,protobuf,sql,memcache 等。本文会对一些技术点做以下两点分析。 Bytom 为什么要采用该技术点? Bytom 如何应用该技术点? 最后介绍综合这些技术点如何实现Bytom。 [patricial tree](http://www.allisons.org/ll/AlgDS/Tree/PATRICIA/) 二、为什么要采用PAT树? •PAT树具有[基数树](https://en.wikipedia.org/wiki... 的特点,内容可快速追踪。 •PAT树具有[merkle树](https://en.wikipedia.org/wik...阅读全文

博文 2018-07-26 16:34:56 比原链Bytom

ECUG Con 邀您共议服务端开发最深度实践

ECUG 全称为 Effective Cloud User Group (实效云计算用户组),由七牛云 CEO 许式伟于 2007 年发起,集结了一批具有高端视角并仍醉心于技术本身的同仁,共同关注云计算前沿技术的最新成果和分布式开发、运维的最佳实践。在过去的八年中, ECUG 社区每年都会组织一场全国性的 ECUG Con 大会,期间众多技术大神纷纷参与,他们或许在大众技术会议已经鲜少露面,但会在 ECUG Con 畅谈心得,共同奉献一场半公开的高规格技术分享盛会。 ECUG Con 发展历程 ECUG Con 2015 将于 2016 年 1 月 22 ~ 23 日在新疆大厦举行,作为具有重要意义的第十期聚会,我们落地北京,同时首次面向所有技术人群公开报名。本届大会仍然以交流云计算产业的最...阅读全文

博文 2017-02-09 08:10:45 七牛云

实现公链双花攻击的多种方法

——区块链兄弟,区块链技术专业问答先行者,中国区块链技术爱好者聚集地 作者:Zhiniang Peng来源:360区块链实验室原文链接:http://t.cn/E2WMkV9本文约10000字+,阅读(观看)需要60分钟著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。针对 EOS、NEO 等大公链平台的多个双花攻击漏洞的案例,360 区块链实验室总结出了多种造成数字货币双花攻击的多种原因,并提出了一种通用的安全减缓措施。各种大公链项目实际上都产生过能够产生双花攻击之类的严重安全问题,盗取加密货币对黑客来讲不是难事。而在几个月的区块链安全研究中,360 区块链实验室收到了来自各个项目方价值超过 30 万美金的数字货币漏洞报告奖励。2008 年,中本聪提出了一种完全通过点对点...阅读全文

博文 2018-11-20 17:34:44 区块链兄弟