标签: Golang

8 篇文章

面向对象设计模式与Go语言实现 – 创建型模式
创建型模式(Creational Patterns) 设计模式概览 创建型模式(Creational Patterns): 单例模式(Singleton) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 建造者模式(Builder) 原型模式(Prototype) 结构型模式(Structural Patterns): 适配器模式(Adapter) …
面向对象设计模式与Go语言实现 – 面向对象设计原则
本系列文章是针对设计模式的系列文章,网上的很多设计模式的文章只讲了个大概和一部分纯理论,示例代码也是实际场景中根本遇不到,往往只会出现在课本中的无生产意义的代码模型。本系列文章则希望在讲述设计模式的同时,采用更贴合生产实践中的代码,在实战中学习设计模式的相关概念,理解设计模式的精髓。 面向对象设计原则 关于面向对象设计原则众说纷纭,有人说是6种有人说是7种,但无论有几种实际上内容都是一致的。 本文…
Bitmap的设计实现及实战应用
大家估计都知道今天的主角Bitmap(位图)这个东西,也都知道它是一种非常有趣且鹅妹子嘤带点儿“黑科技”的数据结构,它能够用非常非常低的存储成本存储数据的状态,在这篇文章中,我将从0到1实现一个Bitmap,并基于Redis的Bitmap在实际应用场景中发挥Bitmap的优点。 实现一个Bitmap 原理与实现思路 我们首先来简单的再过一遍位图的原理,Bitmap是一种将每一个字节用到极致的数据结…
CFC-Golang 开发规范
CFC-Golang 开发规范 注:此开发规范整合了部分网络上有价值的参考意见和开发实践中的总结 Github地址:https://github.com/Kirov7/cfc-golang-develop-norms 为什么需要编程规范? 编程规范又叫代码规范,是团队之间在程序开发时需要遵守的约定。俗话说,无规矩不成方圆,一个开发团队应该就一种编程规范达成一致。编程规范有很多好处,我们简单说几个最…
Window-TinyLFU缓存实现
在我的一个基于LSM-Tree结构的存储引擎项目中,由于LSM-Tree结构的查询操作高度依赖缓存,所以我需要一个高性能的本地缓存模块来提高查询效率,抱着学习的目的,我们来 重复造轮子 亲自实现一个拥有良好性能的缓存模块。 所谓缓存,本质上就是 映射+淘汰策略 ,如何在有限的空间存储最”有用“的数据,也就是如何设定淘汰策略往往是我们所需要关注的,在Redis中,我们很多时候都是用的TTL(Time…
记一次gorm.ErrRecordNotFound踩坑记录
在某个项目中,有个数据验证的业务,即在数据库中查询数据是否存在,若数据已存在则返回错误并给前端提示。稍想了一下就能写出如下代码Func01 Func01 func (t *ServiceInfo) Find(c *gin.Context, tx *gorm.DB, search *ServiceInfo) (*ServiceInfo, error) { out := &ServiceInf…
Golang实现支持中间件的简易TCP框架
在golang的标准库中没有为tcp直接提供像http那样简单易用的服务框架,我们不妨自己手动实现一个 主体思路 我们的实现的主题思路分为以下四个内容 监听服务 获取构建新连接对象并设置超时时间及keepalive 设置方法退出时连接关闭 调用回调接口 TcpHandler 主要结构体和接口 首先是TCPServer的结构体,我们希望用户可以自由构建TcpServer并设置超时时间等自定义选项 t…
Golang实现四种负载均衡算法
负载均衡算法实现 在这篇文章中,我将实现最常见的四种负载均衡算法,即随机负载、轮询负载、加权负载和一致性hash负载 随机负载 随机挑选目标服务器ip type RandomBalance struct { curIndex int rss []string } // 添加新的服务ip func (r *RandomBalance) Add(params ...string) error { if…