草庐IT

支持首次触发的 Go Ticker

促使我写这篇文章主要是在写一个关于虚拟货币账户监控的项目时使用Ticker的问题。Ticker的问题如果用过Ticker的朋友会知道,创建Ticker后并不会马上执行,而是会等待一个时间d,这就是创建时的间隔时间。如果间隔时间很短这基本上不会有太大问题,但是如果对首次执行时间有要求,就会很麻烦。例如以下这个案例:packagemainimport( "fmt" "sync" "time")funcmain(){ ts:=time.NewTicker(5*time.Second) fmt.Println("start_time#",time.Now().Unix()) chanClose:=ma

使用Go搭建并行排序处理管道笔记

一、并行管道搭建:总结下实现思路:归并排序:进行集合元素排序(节点),并两两节点归并排序;每个节点元素要求有序的(排序),当然终点最小节点元数个数为1必是有序的;节点:任务处理单元,归并排序节点是处理输出有序集合任务的单元;文件过大单台机排不了需要多台机集群;根据粒度,单机版:单任务版每个节点可以是排序方法,并发版每个节点可以是一个线程/协程去处理(异步排序),集群版节点是一个主机;单机版,不管并发还是非并发,节点采用的是内存共享数据;集群版节点则需要网络连接请求应答来共享数据;go语言异步数据传输通道通过channel实现的;每个节点将处理的数据异步发送到各自channel中,等待一个主节点

go-micro集成链路跟踪的方法和中间件原理

前几天有个同学想了解下如何在go-micro中做链路跟踪,这几天正好看到wrapper这块,wrapper这个东西在某些框架中也称为中间件,里边有个opentracing的插件,正好用来做链路追踪。opentracing是个规范,还需要搭配一个具体的实现,比如zipkin、jeager等,这里选择zipkin。链路跟踪实战安装zipkin通过docker快速启动一个zipkin服务端:dockerrun-d-p9411:9411openzipkin/zipkin程序结构为了方便演示,这里把客户端和服务端放到了一个项目中,程序的目录结构是这样的:main.go服务端程序。client/main.

使用Go搭建并行排序处理管道笔记

一、并行管道搭建:总结下实现思路:归并排序:进行集合元素排序(节点),并两两节点归并排序;每个节点元素要求有序的(排序),当然终点最小节点元数个数为1必是有序的;节点:任务处理单元,归并排序节点是处理输出有序集合任务的单元;文件过大单台机排不了需要多台机集群;根据粒度,单机版:单任务版每个节点可以是排序方法,并发版每个节点可以是一个线程/协程去处理(异步排序),集群版节点是一个主机;单机版,不管并发还是非并发,节点采用的是内存共享数据;集群版节点则需要网络连接请求应答来共享数据;go语言异步数据传输通道通过channel实现的;每个节点将处理的数据异步发送到各自channel中,等待一个主节点

go-micro集成链路跟踪的方法和中间件原理

前几天有个同学想了解下如何在go-micro中做链路跟踪,这几天正好看到wrapper这块,wrapper这个东西在某些框架中也称为中间件,里边有个opentracing的插件,正好用来做链路追踪。opentracing是个规范,还需要搭配一个具体的实现,比如zipkin、jeager等,这里选择zipkin。链路跟踪实战安装zipkin通过docker快速启动一个zipkin服务端:dockerrun-d-p9411:9411openzipkin/zipkin程序结构为了方便演示,这里把客户端和服务端放到了一个项目中,程序的目录结构是这样的:main.go服务端程序。client/main.

里氏替换原则

OO中的继承性的思考和说明继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设定规范和契约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏。继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障问题提出:在编程中,如何正确的使用继承?=>里氏替换原则基本介绍1.里氏替换原则(LiskovSubstitutionPrinciple)在1

行为型:五. 策略模式

策略模式是什么策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。为什么用策略模式当你想使用对象中各种不同的算法变体,并希望能在运行时切换算法时,可使用策略模式。策略模式让你能将不同行为抽取到一个独立类层次结构中,并将原始类组合成同一个,从而减少重复代码。策略模式让你在有多种算法相似的情况下,减少使用if...else或switch...case所带来的复杂性和臃肿性。策略模式怎么实现这里是以构建缓存的形式来举例,当缓存达到最大限制时就要启动缓存淘汰算法。常用的算法有:最少最近使用(LRU):移除最近使用最少的一条条目。先进先出(FI

行为型:二. 模板方法模式

模板方法模式是什么模版方法模式是设计模式中的行为型的一种模式,它在基类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。为什么要用模板方法模式模板方法将整个算法转换为一系列独立的步骤,以便子类能对其进行扩展,同时还可让超类中所定义的结构保持完整。或者当多个类的算法步骤一致,只是一些细微之处不同时,可用该模式。模板方法模式怎么实现让我们来考虑一个一次性密码功能(OTP)的例子。将OTP传递给用户的方式多种多样(短信、邮件等)。但无论是短信还是邮件,整个OTP流程都是相同的:生成随机的n位数字。在缓存中保存这组数字以便进行后续验证。准备内容。发送通知。发布。我们定义了固定的模

里氏替换原则

OO中的继承性的思考和说明继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设定规范和契约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏。继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障问题提出:在编程中,如何正确的使用继承?=>里氏替换原则基本介绍1.里氏替换原则(LiskovSubstitutionPrinciple)在1

行为型:五. 策略模式

策略模式是什么策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。为什么用策略模式当你想使用对象中各种不同的算法变体,并希望能在运行时切换算法时,可使用策略模式。策略模式让你能将不同行为抽取到一个独立类层次结构中,并将原始类组合成同一个,从而减少重复代码。策略模式让你在有多种算法相似的情况下,减少使用if...else或switch...case所带来的复杂性和臃肿性。策略模式怎么实现这里是以构建缓存的形式来举例,当缓存达到最大限制时就要启动缓存淘汰算法。常用的算法有:最少最近使用(LRU):移除最近使用最少的一条条目。先进先出(FI