Go语言技术文章
-
Go sync.Cond 的 Signal 和 Broadcast 只是唤醒等待者,不能替代共享条件本身。本文用一个受 Mutex 保护的队列状态说明为什么 Wait 必须放在 for 条件循环中,以及如何在状态更新后选择 Signal 或 Broadcast,避免先检查后等待、误用 if 和忘记解锁。208 收藏 -
Linux openat2 可以把可信目录文件描述符作为 dirfd,并用 RESOLVE_BENEATH 限制路径解析不能逃逸根目录。本文用 C 示例说明 RESOLVE_NO_MAGICLINKS、EXDEV、EAGAIN、ENOSYS 的处理,以及它和 RESOLVE_IN_ROOT、RESOLVE_NO_SYMLINKS 的区别。208 收藏 -
Go 1.22 起 archive/zip.Writer.AddFS 可以从 fs.FS 遍历目录并按原结构写入 ZIP。本文给出完整写法,说明 AddFS 与 Close 的错误处理,以及需要过滤文件或修改元数据时的取舍。208 收藏 -
用 Go 的 html/template 生成 HTML 邮件,演示正文、属性和 URL 上下文的自动转义,并说明 template.HTML 只适用于可信片段。207 收藏 -
CSS scroll-driven animations 可以把关键帧动画交给滚动进度或元素可见进度控制。本文从旧的 scroll 事件方案出发,讲清 scroll()、view()、命名时间线、关键帧范围和兼容回退的写法。207 收藏 -
ServeMux 的匹配不是简单比较路径字符串,而是综合方法、主机和路径,并按请求集合的具体程度选择模式。本文用请求生命周期拆解通配符、优先级、405、尾斜杠和 Go 1.22 兼容边界。207 收藏 -
Redis 大 Key 不一定要改业务接口才能治理。本文从测量边界开始,演示如何按字段组拆成多个 Hash,用读取门面保持调用方式不变,再通过双写、回填、切换和旧 Key 下线完成迁移。207 收藏 -
Linux bind 挂载排障时,不要只看默认树形输出。本文用 findmnt 固定 SOURCE、TARGET、FSTYPE 和 OPTIONS 列,再按目标路径和子挂载查询,帮助你准确对应源目录与挂载目标。207 收藏 -
Redis 反复刷新缓存 TTL 时,普通 EXPIRE 可能把更长的剩余时间覆盖掉。本文按首次设置、只延长和只缩短等业务意图,说明 NX、XX、GT、LT 的选择和复查方式。207 收藏 -
Java HttpClient 遇到 3xx 时,301/302/303 可能让 POST 变成 GET,而 307/308 保留方法。本文讲清 followRedirects 的选择、请求体重发边界和响应链排查方法。207 收藏 -
Java computeIfAbsent计算回调不应更新同一个Map。结合JDK25文档和单线程依赖计算示例,区分容器重入检测与业务依赖环,说明完成缓存、失败清理及并发改造边界。207 收藏 -
Go JSON v2 自定义编码器按类型而非字段名匹配。以独立字段类型、MarshalToFunc 与 WithMarshalers 为例,解释调用范围、字符串编码、递归和错误处理,并明确 Go 1.25 实验接口的使用前提。207 收藏 -
Redis ACL 不要直接把消费者账号放进宽泛的读权限。本文从一个只读消费者的排查现场出发,用逐条命令白名单和 key 前缀限制创建账号,再用 ACL GETUSER、允许请求、未授权命令和越界 key 四组结果确认规则真正收紧。207 收藏 -
Go cmp.Compare 返回 -1、0、1 三种排序结果,适合直接表达字段比较;多字段排序时可用 cmp.Or 保留第一个非零结果,再交给 slices.SortFunc。本文用订单示例说明升序、降序与浮点边界。207 收藏 -
从活跃请求与停机耗时定位Shutdown等待原因,展示独立退出期限、Close回退和主函数等待,区分WebSocket、SSE及后台任务的管理范围。207 收藏