Go语言技术文章
-
Go 1.27 的 go fix 新增 slicesbackward modernizer,可把符合条件的手写切片反向循环迁移到 slices.Backward。本文说明如何预览变更、何时保留索引变量,以及生成文件和构建标签带来的边界。484 收藏 -
StringLen 可避免为查询长度而展开完整字符串,但不保证无限输入或固定耗时。本文说明 int64、Unknown、panic 与字节单位边界,给出长度展示组件及分阶段资源预算建议。484 收藏 -
用一个共享 map 的最小测试复现 Go 并发读写竞态,说明 go test -race 的触发边界,并用 sync.RWMutex 收拢修复方案。483 收藏 -
解释 Go //go:embed 为什么在目录递归时排除以点号或下划线开头的文件,比较目录名、当前层通配符与 all: 前缀的差异,并给出精确嵌入、结果检查和安全边界。483 收藏 -
Go 的 weak.Pointer 不会阻止对象回收,但 finalizer 会临时复活对象。本文说明旧弱指针为何在 finalizer 排队时失效,以及如何通过禁止强引用逃逸、改用 runtime.AddCleanup、按缓存未命中重建对象来消除复活风险。483 收藏 -
reflect.VisibleFields 会把匿名嵌入结构中的可见字段和未导出字段一起返回,真正的导出筛选要交给 StructField.IsExported。本文用一个包含嵌入结构的例子说明如何保留提升字段、处理 Index,并封装成可复用函数。483 收藏 -
Go heap 默认存活视图可能看不到已回收的短命对象。切换 alloc_space、alloc_objects,并结合业务观察窗口、MemProfileRate 与实际堆分配,区分分配压力和存活容量,避免误判泄漏或盲目提高采样精度。483 收藏 -
Go gzip 解压后文件名为空,通常不是数据损坏,而是 gzip Header 没有可选的 Name 字段。本文说明如何在 Writer 端保存文件名、在 Reader 端读取并处理空值,以及跨系统传输时怎样设计可靠的文件名兜底。483 收藏 -
Go 的 os.ReadFile 遇到符号链接时默认读取链接目标内容;本文对比 ReadFile、Stat、Lstat 和 Readlink,说明如何区分目标文件、链接自身与链接保存的路径。483 收藏 -
Go http.Server 的优雅关闭不是直接调用 Close,而是用 Shutdown 先停止监听、关闭空闲连接,再等待活动请求结束。本文给出带退出信号和超时上下文的最小实现,并说明 ErrServerClosed、超时以及 WebSocket 等长连接边界。483 收藏 -
Go errors.As 返回 false 时,先看错误实现的 Error 接收者和实际动态类型,再决定目标变量是 *T 还是 T。本文用一个小型校验错误示例说明指针错误、值错误、%w 包装和常见声明误区。483 收藏 -
连接超时不限制响应体读取。通过有限响应客户端示例区分拨号、响应头和总预算,处理 context 生命周期、读取错误、正文大小与关闭责任,并说明流式请求的不同策略。483 收藏 -
在文件节点返回 fs.SkipDir 会跳过父目录剩余条目,fs.SkipAll 则停止整棵树。本文用对照表和代码说明安全选择边界。482 收藏 -
Golang · Go教程 | 3星期前 | 标准库 · 配置管理 · 错误处理 · 并发编程 · Go教程 · Go 并发初始化 共享配置 sync.OnceValue sync.OnceValues
Go 1.21+ 可用 sync.OnceValues 把共享配置与初始化错误作为一对结果缓存,避免 sync.Once 配合外部变量造成分散状态。本文通过可测试的 ConfigProvider 展示并发只加载一次、错误传播及不适合自动重试的边界。482 收藏 -
Go Colly 默认会记录已经访问过的 URL,所以同一个地址第二次 Visit 常见返回 ErrAlreadyVisited。本文从复现、允许重复访问、分页参数和重试边界说明怎样处理,避免用全局开关掩盖请求设计问题。482 收藏