摘要:
阅读全文
摘要:
1. flag库的基本用法 下面是一个golang flag库的命令行demo程序 func main() { wordPtr := flag.String("word", "Jude", "a string") numPtr := flag.Int("numb", 42, "an int") bo 阅读全文
摘要:
一个实用的logger需要提供以下这些功能: 支持把日志写入多个输出流中,比如可以选择性的让测试、开发环境同时向控制台和日志文件输出日志,生产环境只输出到日志文件中 支持多级别的日志等级,常见的有:TRACE、DEBUG、INFO、WARN、ERROR、PANIC等 支持结构化输出,结构化输出常用的 阅读全文
摘要:
1. Hashicorp Raft实现分析 在raft算法中,典型的领导者选举在本质上是节点状态的变更。具体到raft源码中,领导者选举的入口函数就是run(),在raft.go中以一个单独的协程运行,来实现节点状态的变更 在下面的实现代码中,可以看到Follower、Candidate和Leade 阅读全文
摘要:
1. 创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用new运算符直接实例化这些对象 这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活 1.1 工厂模式 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,而是通过使用一个共同的接口来指向新创建的对象 代 阅读全文
摘要:
1. Prometheus简介 Prometheus是一个开源的系统监控和报警系统,在2012年由SoundCloud创建,并于2015年正式发布 2016年,Prometheus项目正式加入CNCF基金会,成为继kubernetes之后第二个在CNCF托管的项目,现在已经广泛用于容器和微服务领域 阅读全文
摘要:
1. RabbitMQ介绍 RabbitMQ是采用Erlang编程语言实现的高级消息队列协议AMQP(Advanced Message Queuing Protocol)的开源消息队列中间件 消息队列中间件的作用: 应用解耦 流量削峰 异步处理 缓存存储 消息通信 提高系统扩展性 1.1 Rabbi 阅读全文
摘要:
1. runtime.Caller()方法介绍 runtime.Caller()函数的签名如下: func Caller(skip int) (pc uintptr, file string, line int, ok bool) 可以看到其有一个传入参数skip: skip=0:Caller()会 阅读全文
摘要:
1. 一致性哈希算法 关于一致性哈希算法的详解,可以参见这篇博客文章 一致性哈希详解 简单来说,一致性哈希通过哈希环和增加虚拟节点来解决节点变更时的大范围数据迁移和冷热不均的问题 一致性哈希的一个开源实现为:stathat.com/c/consistent 1.1 数据迁移 我们首先从数据迁移的角度 阅读全文
摘要:
1. 读取整个文件 读取整个文件是效率最高的一种方式,但其只适用于小文件,大文件一次读取会消耗大量内存 1.1 使用文件名直接读取 使用os.ReadFile()方法可以实现直接读取 func fileOne() { content, err := os.ReadFile("test.txt") i 阅读全文