Go语言技术文章
-
用 Go container/ring 实现固定容量的最近采样窗口,说明如何写入、覆盖最旧值,并按时间顺序导出有效数据。110 收藏 -
用 Go atomic.Uint64 实现并发计数,说明 Add、Load、Store 和 CompareAndSwap 的边界,并区分单个计数值与多字段一致快照。110 收藏 -
Go encoding/json 默认会忽略未知字段。本文用嵌套类型的 UnmarshalJSON 和独立 Decoder,只对指定对象开启 DisallowUnknownFields,兼顾接口兼容与请求校验。110 收藏 -
用 Go net/http Client 的 CheckRedirect 比较重定向前后的 scheme、主机和端口,在信任边界变化时清理 Authorization、Cookie 与自定义 API 密钥,并说明默认转发、307/308 请求体和 ErrUseLastResponse 的处理边界。110 收藏 -
讲清 Go encoding/gob 新增结构体字段时的兼容规则,给出默认值处理、双向读写测试和字段改名、类型变化等迁移边界。110 收藏 -
用单槽触发缓冲和单 worker 设计 Go time.Ticker 周期任务,避免慢任务重叠执行,同时保留一次下一轮触发,并说明取消、告警与可靠队列边界。110 收藏 -
本文用同一 Dot API 演示 Go SIMD 与标量实现如何通过构建约束共存,并用强制模拟配置验证回退结果与尾部处理。110 收藏 -
io.Reader 的 Read 允许在返回最后一批数据时同时给出 io.EOF。本文从返回值契约、读取循环、io.ReadFull 和常见误区说明调用方如何避免丢数据与误判结束。110 收藏 -
Golang · Go问答 | 1星期前 | CGO · 垃圾回收 · Go问答 · CGO runtime.SetFinalizer runtime.KeepAlive C资源 显式Close 资源生命周期
runtime.SetFinalizer 只能为持有 C 资源的 Go wrapper 提供不确定的释放兜底,不能替代显式 Close。本文用生命周期状态、cgo 指针规则和 runtime.KeepAlive 说明如何避免提前释放、重复释放与关闭顺序错乱。110 收藏 -
Go 用 bufio.Writer.ReadFrom 复制大文件时,Reader 的短读通常不是错误,底层 Writer 的短写则必须通过 ReadFrom 和最后一次 Flush 的错误共同判断。本文按调用路径说明快速路径、缓冲区、io.ErrShortWrite 与 io.ErrNoProgress 的处理方式。110 收藏 -
Go zlib 解压出现校验和错误时,需要区分尾部不匹配、输入截断和关闭错误。本文用受控小样本演示完整读取、保留错误链与失败正文隔离,并说明压缩器关闭和底层资源的处理责任。110 收藏 -
Go sync.Pool 里的对象会消失,是因为它只承诺临时对象复用,不承诺持久保存:池中元素可被运行时自动移除,Get 也可能直接把池当作空池。本文用 New、Get、Put 示例说明正确用法,并划清 sync.Pool 与业务缓存的边界。109 收藏 -
用 go/format.Source 格式化模板生成的 Go 源代码,处理完整文件与代码片段的差异,再在成功后写入文件,并说明固定 gofmt 版本的稳定性边界。109 收藏 -
slices.Insert 批量插入是否复用底层数组,先看插入后的长度是否超过原切片容量,再结合尾部或中间插入位置判断移动成本。本文给出容量判断、别名边界与可复查验证代码。109 收藏 -
time.AfterFunc 会在独立 goroutine 中执行回调。本文用事件 channel、stop 信号和 callbackDone 完成信号,说明如何让主 goroutine 安全接收超时事件,并处理 Stop、Reset 与回调并发边界。109 收藏