Go语言技术文章
-
Go test 输出 cached 并不代表环境变量读取失败,而是成功测试结果可能被复用。本文解释缓存输入、环境变量边界、GODEBUG 线索和 -count=1 的正确用法。468 收藏 -
Go 的 http.Flusher 只能把服务端已缓冲的数据交给网络层,不能保证代理和客户端立刻呈现。本文用最小 SSE 示例说明如何检测 Flusher、正确 Flush,并排查包装器与代理缓冲。468 收藏 -
用一个 Go 类型约束同时覆盖整数底层类型和自定义方法,讲清 ~T、定义类型、类型别名与方法集之间的关系。468 收藏 -
Go regexp.Expand 依赖 FindSubmatchIndex 返回的字节偏移,把命名组或数字组展开到可复用的 []byte 缓冲区。本文用完整示例说明四个输入、模板边界、未匹配组和循环拼接方式。468 收藏 -
Golang · Go教程 | 2天前 | Go教程 · encoding/json · Go encoding/json json.RawMessage json.Decoder 未知字段 兼容升级
围绕 Go json.Decoder 的结构体解码边界,说明如何用默认宽松解码兼容新增字段,再用 json.RawMessage 保留未知字段,并按场景切换严格校验。468 收藏 -
time.Ticker.Stop 只负责停止后续计时,不承诺把已经进入通道的值清空。本文从定时刷新任务的退出现场出发,拆解停止语义、旧值竞态、goroutine 泄漏与可验证的退出写法。467 收藏 -
Go HTTP 客户端偶发变慢时,只看总耗时很难判断问题在 DNS、建连、TLS 还是服务端首字节。本文用 net/http/httptrace 的 ClientTrace 串起关键回调,区分连接复用与新建连接,并给出可落地的耗时记录和排查边界。467 收藏 -
Go 1.24 引入的 runtime.AddCleanup 适合为包装资源安排兜底清理,但回调不是确定时钟,也不能替代显式 Close。本文用文件句柄包装场景说明 AddCleanup、KeepAlive 和 Cleanup.Stop 的真实边界。467 收藏 -
encoding/binary.Append 会把固定大小数据追加到已有字节切片,并返回可能扩容后的新切片。正确承接返回值,才能同时处理底层数组复用、容量变化和不支持类型的错误。467 收藏 -
Go 的 container/heap 允许在队列元素优先级变化后用 heap.Fix 恢复堆序。本文从 heap.Interface 的索引维护出发,拆解 Fix、Remove 与 Pop 的边界,给出可运行的可变优先队列示例。467 收藏 -
Go 1.27 为 go test -json 的 output 事件增加可选 OutputType。通过 Action、Package、Test、OutputType 和 FailedBuild 的组合,解析器可以区分测试框架帧、失败首行、失败续报与构建失败,避免 CI 报告重复计数。467 收藏 -
Golang · Go教程 | 3天前 | 性能优化 · 垃圾回收 · Go教程 · go bytes.Buffer Go sync.Pool Go 对象池 sync.Pool 缓存 Go 临时对象复用
sync.Pool 适合复用短生命周期对象,却不保证对象一直存在或每次 Get 都命中。本文说明 Get、New、Put 和自动移除的边界,并给出稳定缓存的替代选择。467 收藏 -
Go 的 sync/atomic.Uint64 适合做高并发下的轻量计数,但 Add、Load、Swap 的读写边界和溢出语义不能靠直觉处理。本文从请求统计场景出发,给出计数器封装、快照读取、并发测试和超过 uint64 上限后的处理策略。466 收藏 -
Golang · Go问答 | 2星期前 | web安全 · net/http · Go问答 · origin csrf Go 1.25 http.CrossOriginProtection Sec-Fetch-Site
Go 1.25 的 http.CrossOriginProtection 能拦截非安全跨源浏览器请求。本文从 Handler 接入、Origin 白名单和安全方法边界说明它适合替代哪些旧防护,以及上线前要补的检查。466 收藏 -
Go 的 bytes.Cut 适合按首个分隔符拆出 before、after 和 found 三个结果。本文从空片段、缺少分隔符和请求头解析中的误判出发,说明如何用 found 区分合法空值与格式错误。466 收藏