DCDan Cheinchedan.io·Jan 12, 2024 · 2 min read用gum给IRedis增加数据源选择能力前言 gum 是一个命令行工具, 它可以方便地为脚本提供TUI 交互能力。 本文以扩展 IRedis 为例,展示了 gum 的使用方法。 问题 IRedis 是一个非常好用的 redis 命令行客户端, 它提供很多方便实用的功能(语法高亮,自动完成等) 要连接到指定数据源 , 只要执行以下命令: iredis --url 'redis://usr:passwd@foo-bar.com:6379?db=0' 但工作中经常需要连接不同的数据源,每次都需要输入不同的地址很麻烦。得记住每个数据库的地址...00
DCDan Cheinchedan.io·Aug 24, 2022 · 3 min read在gorm中使用乐观锁乐观锁简介 乐观锁(又称乐观并发控制)是一种常见的数据库并发控制策略。 引用wikipedia的描述: 乐观并发控制多数用于数据竞争(data race)不大、冲突较少的环境中,这种环境中,偶尔回滚事务的成本会低于读取数据时锁定数据的成本,因此可以获得比其他并发控制方法更高的吞吐量。 它的作用是防止并发更新数据库中的数据,从而避免数据的混乱。 本文的主旨讨论如何在GORM中实现并使用乐观锁,所以在这里不赘述乐观锁的特点及适用场景。 不过为了方便后面的讨论, 我们先简单说明实现乐观锁的核心要素...00
DCDan Cheinchedan.io·Jul 26, 2022 · 4 min read借助 docker 对 GORM 应用进行单元测试两年前我曾经写过一篇文章讨论如何用sql mock 对GROM应用进行单元测试。 回顾这两年,这种测试方法至少在我团队中并没有被广泛采纳。 究其原因,还是编写测试用例太麻烦了。 最核心的问题需要手工拼出 GORM 生成的 SQL 语句,然后进行对比验证。 这个工作量已经远超过要测试的方法本身了。 毕竟, 我们采用 GORM 的主要原因就是为了避免手写每一段SQL的麻烦。 显然这个方案需要改进。 改进方案 通常, 我们说数据库应用不好测试原因主要在于数据库服务本身。 如果大家共用一个远程数据库,...00
DCDan Cheinchedan.io·Jun 16, 2022 · 2 min read是时候从 ahmetb/go-linq 升级到 samber/lo 了golang开发中经常需要对集合数据进行转换、过滤、汇总等。 虽然这类工作大部分可以用简单地循环搞定,但毕竟还是啰嗦。 在golang1.18以前,这些工作常用ahmetb/go-linq来完成。 但随着golang1.18的发布,其提供内置了泛型的支持。 这时samber/lo成了更好的选择。 linq 的特点 LINQ(language integrated query)这个概念来自 c#,linq 库借用了此思路,在golang中提高了操作对slice的开发效率。 注意:只是提高了开发效率...00
DCDan Cheinchedan.io·Jun 13, 2022 · 2 min readIPNS (InterPlanetary Name System) 详解前言 本文是笔者在学习IPFS地过程中的学习笔记。内容主体翻译于官方文档。 IPNS 是什么 它是一套名称寻址系统,可以类比dns。主要目标是在IPFS上为动态内容提供稳定的访问地址。 我们知道IPFS是基于内容寻址的。 它基于每个文件中的内容创建一个唯一地址(即CID)。 如果你想把某个文件地址分享给别人,此后每当文件内容发生变化时,应需要把最新的地址再发一遍。 对于可变的内容来说, 这显然是无法接受的。 IPNS 就是用来解决这个问题的。 用它可以创建"内容可更新"的地址。 在IPNS中, ...00