摘要: 原型模式是什么 原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。 为什么要用原型模式 可以帮助我们优雅地创建对象的拷贝。在这种设计模式里面,将克隆某个对象的职责交给了要被克隆的这个对象。被克隆的对象需要提供一个clone()方法。通过这个方法可以返回该对象的拷 阅读全文
posted @ 2022-03-20 14:59 EthanWell 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 生成器模式是什么 生成器模式也叫做建造者模式,是一种创建型的设计模式, 使你能够分步骤创建复杂对象。 为什么要用生成器模式 假设有这样一个复杂对象, 在对其进行构造时需要对诸多成员变量和嵌套对象进行复杂的初始化工作。这些初始化代码通常深藏于一个包含众多参数且让人基本看不懂的构造函数中。而且在很多时候 阅读全文
posted @ 2022-03-20 11:14 EthanWell 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 单例模式是什么 单例模式是一种创建型设计模式:单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。 为什么要用单例模式 为什么要用单例模式?在系统中某些对象,我们只需要一个全局的,如果每次实例化会浪费资源。所以单例模式可以节约内存,加快对象访问速度,因此单例模式在某些场合适合使用。比如多个 阅读全文
posted @ 2022-03-16 22:59 EthanWell 阅读(128) 评论(0) 推荐(0) 编辑
摘要: sync.Once 是 Go 标准库提供的使函数只执行一次的实现。作用与 init 函数类似,但有区别。在某些情况下预先初始化一个变量会增加函数的启动延迟,如果实际执行时可能用不上这个变量,那么初始化就是非必须的。sync.Once很好的解决了这个问题,Once可以在任意的位置调用,并且只会执行一次 阅读全文
posted @ 2022-03-13 14:24 EthanWell 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 原子操作 原子操作是指在程序运行中不能被中断的操作,原子操作是无锁的常常是由CPU指令直接实现,而锁一般由操作系统的调度器实现,所以原子操作的效率一般更高。 golang中原子操作支持的类型有:int32、int64、uint32、uint64、uintptr、unsafe.Pointer gola 阅读全文
posted @ 2022-03-13 11:07 EthanWell 阅读(575) 评论(0) 推荐(0) 编辑
摘要: 书卷多情似故人,晨昏忧乐每相亲。 ——(明)于谦《观书》 阅读全文
posted @ 2022-03-12 16:51 EthanWell 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 由于有时候跑脚本几个小时看不到进度,所以想着写一个简单的命令行的进度条。类似下面这样的 其中的原理主要是\r回车符(将光标移动到行首)。这样的话就可以重新打印一行以覆盖之前的那一行。 func main() { for i := 0; i < 10; i++ { fmt.Printf("\r#### 阅读全文
posted @ 2022-03-12 13:47 EthanWell 阅读(1914) 评论(0) 推荐(0) 编辑
摘要: 起初是因为要去拉取一些第三方的数据,而第三方的API接口都有限流措施。比如6000/分钟,500/分钟。想着拉取数据就用多个协程的方式。但是容易超频,所以想着写一个限流的东东。网上有讲令牌桶类似下面这样:(网上的原理图) 令牌桶原理 有一个桶,桶有容量(cap:桶的容量)。 然后以恒定的速度往桶里加 阅读全文
posted @ 2022-03-02 23:48 EthanWell 阅读(810) 评论(0) 推荐(0) 编辑
摘要: go语言在设计上确保了一些安全的属性,限制了程序可能出错的途径。例如严格的类型转换规则。但也使得很多实现的细节无法通过go程序来访问,例如对于聚合类型(如结构体)的内存布局,或者一个函数对应的机器码。 这里我们将讨论unsafe包,它是由编译器实现的,实现了对语言内置特性的访问功能,这些特性一般是不 阅读全文
posted @ 2022-03-02 00:15 EthanWell 阅读(667) 评论(0) 推荐(0) 编辑
摘要: 我们在设计产品的时候通常都会遇到消息通知的时候,比如用户下单支付成功,比如用户有站内信来可以实时通知。而http是单向的,客户端请求,服务端返回,这次请求就已经结束。而websocket可以保持连接实现长连接,在遇到通知时往往使用websocket来达到服务端主动向客户端发送消息的目的。 我们的目标 阅读全文
posted @ 2022-02-23 00:16 EthanWell 阅读(4254) 评论(0) 推荐(2) 编辑