Go语言技术文章
-
Go 服务重新发布后,用户仍拿到旧 JS 或旧 CSS,通常不是浏览器“没刷新”,而是入口 HTML 与带指纹资源用了同一套缓存策略。本文用 Cache-Control、ETag 和文件名指纹拆出一套可验证的静态资源发布方式。251 收藏 -
io.Copy 看起来只是把 Reader 写入 Writer,但 src 的 WriterTo、dst 的 ReaderFrom 以及 bufio.Writer 等包装器会改变实际路径。本文用可运行示例拆开快路径、包装器边界和验证方法,帮助定位复制速度突然下降的问题。251 收藏 -
Go regexp.FindAllStringIndex 返回的是字节下标,不是字符序号。本文用中文字符串拆开说明下标、切片、Rune 边界和常见误用,给出可直接验证的安全写法。251 收藏 -
Go 1.27 新增标准库 uuid 包。本文用 NewV7、Parse、Compare 和 String 拆开时间排序、格式兼容、非法输入与零值边界,给出可运行的请求标识示例。251 收藏 -
Go 1.23 的 maps.Keys 返回 iter.Seq,遍历顺序仍不保证稳定。本文从 for range 与 maps.Keys 的关系出发,演示如何用 slices.Sorted 得到可复现的键序列,并说明排序成本与兼容边界。251 收藏 -
讲清 Go compress/gzip.Header.Name 的设置时机、Writer.Close 和 Reader.Name 的读取方式,并区分 gzip 内部文件名与磁盘路径、下载文件名。251 收藏 -
bytes.Reader 的 Len 返回当前未读字节数,Size 返回底层字节切片的原始长度。本文用 Read、ReadAt、Seek 和 Reset 对比两者的变化,帮助你在读取循环和原始载荷统计中选对 API。251 收藏 -
围绕 Go testing.T.TempDir 讲清并行子测试的目录隔离、父测试共享只读夹具、自动清理和 GOTMPDIR 排查边界。251 收藏 -
配置文件写入成功并不等于断电后一定保留。本文用 Go 的临时文件、os.File.Sync、os.Rename 和目录同步串起安全替换流程,解释每一步解决什么问题,以及如何用重启和故障注入思路核对结果。250 收藏 -
用 Go 检查外部命令启动时会继承哪些环境变量,演示 Cmd.Environ、Cmd.Env 与 LookPath 如何配合,让本地和生产环境的启动条件更容易复现。250 收藏 -
用 Go 的 net/netip 解析 CIDR 配置并校验客户端地址,重点看 Prefix.Contains 的地址族边界、ParsePrefix 错误处理与 PrefixFrom 的掩码差异。250 收藏 -
Go 的 ResponseWriter 在第一次 Write 时可能已经隐式提交 200 OK。本文解释为什么正文之后再设置状态码无效,并给出错误分支、响应头和业务结果的稳定写法。250 收藏 -
自定义集合不必暴露内部切片或 map,也能直接支持 for range。做法是让 All 方法返回 iter.Seq[T],在闭包里调用 yield,并把 false 当作停止信号。本文用一个泛型集合说明接口形状、提前 break 和重复遍历的边界。250 收藏 -
Go pprof 里的 CPU、mutex 和 block profile 关注的不是同一件事。本文用一个采集窗口说明三者的开关、命令、栈位置和适用边界,帮助你判断到底是 CPU 忙还是 goroutine 在等锁、等通道。250 收藏 -
Go atomic.Pointer 的 Load 返回 nil,只能说明当前没有对象,不能区分零值未初始化和曾有对象后被 Store(nil) 清空。本文用额外状态位和 CAS 说明如何设计可判断的生命周期状态。250 收藏