Go语言技术文章
-
Go 的 nil channel 可以让 select 分支动态失效。本文区分 nil、开放和关闭 channel,演示双输入 fan-in 如何在识别 ok=false 后安全退出。463 收藏 -
通过包装 tls.ClientSessionCache 记录 Get、Put 与命中,再用 ConnectionState.DidResume 区分缓存命中、TCP 连接复用和真正的 TLS 会话恢复。463 收藏 -
从 net.Listen 的 network 和 address 入手,判断 Go TCP 监听只接受 IPv4 或 IPv6 的原因,并给出单族监听与显式双监听的处理方案。463 收藏 -
Go 默认把解码到 interface{} 的 JSON 数字变成 float64,UseNumber 则先保留为 json.Number。本文用示例说明精度变化发生在哪里、如何解析以及金额等场景的边界。463 收藏 -
Go 服务启动时监听端口失败,先区分地址已占用、地址族不匹配和权限问题,再用 ss、lsof 及最小化 Go 复现确认根因。462 收藏 -
Go 的 iter.Pull 把 push 风格的 iter.Seq 转成 next 和 stop 两个函数,适合需要逐个取值的场景。本文用可运行示例说明 next 的结束信号、提前停止时 defer stop 的必要性,以及不能并发调用 next 和 stop 的边界。462 收藏 -
依赖升级后版本仍不如预期,通常不是 go get 失效,而是 MVS 按完整模块图计算了 build list。本文用三组 Go 命令定位谁抬高了版本,并处理 replace、exclude 与工作区边界。462 收藏 -
Go 的 bytes.Buffer.Bytes 返回的是共享底层存储的未读区域切片。本文区分 Read、Write、Reset、Truncate 带来的视图失效与真实覆盖,并给出安全复制方案。462 收藏 -
sync.Pool 适合复用可丢弃的临时缓冲区,而不是业务状态或必须长期保留的资源。本文用 bytes.Buffer 和 []byte 说明 Reset、归还时机、异常容量清理与收益判断。462 收藏 -
Go 的 io.Pipe 没有内部缓冲,写端和读端必须在同一条消费链上配合推进。本文用一个压缩写入场景说明为什么 Write 会等待、CloseWithError 如何把失败传给另一端,以及怎样安排 goroutine 的退出和错误回收。461 收藏 -
Go 测试里临时目录、数据库连接和环境变量如果没有按作用域清理,单测会出现串状态和偶发失败。本文用 testing.T.Cleanup 对比 defer、子测试和失败路径,给出资源注册顺序与验收清单。461 收藏 -
time.AfterFunc 返回的 Timer 既可能尚未触发,也可能已经进入回调。本文用 Stop、Reset 和回调状态拆解竞态边界,给出可验证的防重复调度写法。461 收藏 -
crypto/rand.Read 的签名虽然返回 n 和 err,但当前 Go 文档规定它会填满切片且不返回错误。本文从 Reader、io.ReadFull 和失败测试边界解释为什么不能把部分字节当成可用随机值。461 收藏 -
解释 Go html/template 为什么会对 URL 查询参数和路径片段做上下文转义,并区分正常百分号编码与不安全协议导致的 #ZgotmplZ。461 收藏 -
Go 文件是否参与编译,不只看 //go:build,也要把 _GOOS、_GOARCH 或组合后缀带来的隐含条件一起判断。本文用 go list 区分 GoFiles 与 IgnoredGoFiles,并说明 -tags、gofmt 和 _test.go 的边界。461 收藏