Go语言技术文章
-
解释 encoding/csv.Reader.ReuseRecord 的切片复用语义,演示批量读取时如何降低分配,以及需要长期保存记录时如何避免数据被下一次 Read 覆盖。473 收藏 -
SetMemoryLimit 和 GOMEMLIMIT 都是在约束 Go 运行时内存预算,但它们不是硬性进程上限。本文用一个可复测的小程序说明 GC 频率、HeapReleased 与外部内存的边界,并给出压测和容器部署中的核对方法。473 收藏 -
解释 Go modernize/newexpr 为何暂不把显式 uint32、int64 泛型辅助函数改成 new(expr),并给出默认类型、显式转换与批量审查边界。473 收藏 -
context.Err 和 context.Cause 不是同一个答案。本文用父子 Context、首个取消者和原因转发三个边界,说明为什么只能得到 context.Canceled,以及日志该如何记录。473 收藏 -
用 Go 泛型和 comparable 约束写一个保持顺序的切片去重函数,覆盖 int、string、自定义结构体及不可比较元素的处理边界。473 收藏 -
go test -race 变慢通常是正常的检测成本。本文教你固定比较口径,拆分编译、执行、内存和覆盖率影响,并判断哪些测试值得长期运行 race。473 收藏 -
用 bytes.Reader 从指定偏移量读取时,Seek 会移动当前位置,ReadAt 不会移动游标,切片则改变可见数据范围。本文用示例说明三种写法与越界处理。473 收藏 -
Golang · Go问答 | 2天前 | channel · select · go · 并发控制 · Go select nil channel Go 动态禁用 select 分支 Go channel 状态控制 Go select 关闭频道
Go select 不能直接删除 case,但可以把参与选择的频道变量设为 nil 来动态禁用分支。本文用一个单值转发循环说明输入、输出、关闭频道和 default 的边界。473 收藏 -
客户端断开后,Go Handler 不会因为看到断开就自动停止全部代码;要让下游 HTTP、数据库和循环及时收尾,必须从 r.Context() 监听取消并继续向下传递。472 收藏 -
Go 的 encoding/gob 适合在 Go 程序之间保存结构化本地缓存。本文用带版本和过期时间的结构体演示原子写入、恢复、缓存失效处理,以及导出字段和结构体演进时的边界。472 收藏 -
Go 的 http.Cookie 设置成功后,浏览器是否发送主要由 Path 与请求 URL 的路径匹配决定。本文解释显式 Path、默认路径、排查顺序,以及删除 Cookie 时的配对规则。472 收藏 -
Go gzip.Writer.Flush 会让流式数据更早可见,但高频调用会同步写出、增加同步标记并切碎压缩批次。本文给出消息边界、HTTP 缓冲和压测判断方法。472 收藏 -
Go 1.23 引入的 unique 包可以把重复值映射到可比较的 Handle,但它不是无上限缓存。本文用字符串标签场景说明 unique.Make 的比较方式、Handle 生命周期和不适合使用的业务边界。471 收藏 -
Go 用 os.Stat 判断文件是否存在时,不能把所有非 nil 错误都当成不存在。本文区分缺失、权限不足和其他系统错误,并给出 errors.Is 的安全写法。471 收藏 -
atomic.Uint64.Load 只保证单个数值的原子读取,不会把多个计数器自动组成业务快照。本文用 RWMutex 和 atomic.Pointer 说明组合一致性的实现取舍。471 收藏