Go-zero

Go深度指南:从基础到高级的全面解析

Go 语言自推出以来,因其简洁性、并发支持和高效性能,在云计算、微服务和分布式系统中广泛应用。作为开发者,面试时往往需要面对一系列技术问题,这些常被称为“八股文”的题目,虽然有时显得高级特性,力求每个解释都严谨实用,避免空话套话。让我们从最基础的部分开始。 第一章:基础概念与语法 变量与类型系统 Go 是静态类型语言,类型安全且编译时检查。变量声明使用 var 关键字,或短变量声明 :=。基础类型包括整型、浮点型、布尔型和字符串等。理解零值概念至关重要:未初始化的变量会赋予其类型的零值,例如整型为 0,字符串为空字符串””。 类型转换必须是显式的,Go 不支持隐式类型转换。例如,将 int 转换为 float64 需要使用 float64(x)。这有助于避免意外错误。 控制结构 Go 的控制结构包括 if、for、switch 等,设计简洁。for 循环是唯一的循环结构,但可以模拟 while 循环。if 语句可以包含初始化语句,增强可读性。 switch 语句在 Go 中更为灵活,case…

Go 语言文件处理

文件处理是 Go 语言中最常见的操作之一——读取配置、写入日志、数据持久化都离不开它。Go 的标准库提供了一套简洁而强大的文件 I/O 接口,覆盖从单次读写到流式处理的各种场景

Go 文件和文件夹工具类:一个开箱即用的 fileutil 包v2

基于 Go 1.25 的新特性,我将之前的工具包进行了全面重构和升级。 新版主要引入了 os.Root 保障文件操作安全,使用迭代器和泛型提升代码的现代感与复用性,并整合了 testing/fstest 优化测试体验。 一、新版 fileutil 包代码 二、使用示例 三、关键优化点详解 希望这个融合了 Go 新特性的工具包能让你的开发工作更高效、更安全。

 Go 开发经验总结:从入门到写出生产级代码

用 Go 语言写后端已经好多年了。从最初被 if err != nil 烦到不行,到现在能熟练应对各种并发场景和代码组织,踩过不少坑,也有一些心得。这篇文章把这些经验整理下来,希望能帮到正在用 Go 的朋友。每个主题都会配上可直接运行的代码示例,你可以边看边跑。 1. 错误处理:不止是 if err != nil 很多刚接触 Go 的人都会被满屏的 if err != nil 吓到。但真正的问题是,很多人只检查了错误,却没做好错误包装和分类。 1.1 用 %w 包装错误,保留上下文 Go 1.13…

使用Go语言实现Redis分布式锁(附有看门狗自动续期机制)

Redis我们日常开发经常使用,而分布式锁的一个重要实现就是通过Redis完成,分布式锁要解决的核心问题是防止对某个资源进行重复或者过度请求,例如我们在分布式系统中创建订单之前,必须获取分布式锁才能创建订单,其要解决的主要问题有两个: 1)如果用户重复点击提交订单按钮,可以通过分布式锁避免重复创建订单 2)商品库存有限,通过分布式锁能够解决超卖问题 Redis实现分布式锁 由于Redis中set nx命令的原子性,只有在键值不存在的时候才能设置值,因此可以通过set nx实现分布式锁,但是它有弊端就是: 如果业务还没有执行完,那么会导致业务没有执行完,锁就被释放了 因此延伸出了基于Redis延伸的Redisson分布式锁框架,它实现的原理在于使用Redis单线程模型执行SET NX命令lua脚本确保获取锁操作原子性,同时它内置了更为丰富的看门狗机制,满足了在业务执行过程中,自动续期锁 Go语言实现分布式锁 上面都是基于理论介绍,接下来就实现基于Redis的分布式锁 明确原子性操作 在实现之前,我们要明确加锁、释放锁与续期锁的机制: 加锁:设置键值与过期时间,通过setnx px实现,如果键值已经存在直接返回错误 释放锁:我们一定要确保释放的锁是自己加的锁,因此要判断value值是否是之前设置的value值,只有判断正确才能够释放锁 续期锁:与释放锁同理,只有当前锁是自己加的锁才续期 完整测试用例: 测试依赖 miniredis 模拟 Redis 服务,请先安装: 测试文件:mutex_test.go 运行测试 -race 标志会启用数据竞争检测,确保并发安全。 注意事项

Go 文件和文件夹工具类:一个开箱即用的 fileutil 包

在日常开发中,文件与目录操作是高频需求。虽然 Go 标准库已经提供了 os、path/filepath 等基础能力,但直接使用仍需处理大量边界条件。本文将封装一个实用的 fileutil 工具包,涵盖常用操作:路径存在判断、目录创建、文件复制、目录复制、移动、删除、遍历、大小统计等。每个方法都有详细的注释和错误处理,可直接集成到项目中。 完整代码可在文末获取,或直接复制使用。 功能概览 核心代码:fileutil 包实现 使用示例 要点说明 函数 注意事项 CopyFile 覆盖已存在的目标文件;保留源文件权限 MoveFile 跨文件系统自动降级为复制+删除 CopyDir 递归复制,目标目录存在时会合并内容 SafeWrite 原子写入,先写临时文件再 rename,防止写一半时进程崩溃导致数据损坏 ListFiles 支持按扩展名过滤,返回绝对路径 EnsureDir 已存在但不是目录时报错,避免误用 这个工具包覆盖了日常开发中 90%…