Go问答技术文章
-
Golang · Go问答 | 5天前 | 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 收藏 -
Golang · Go问答 | 5天前 | HTTP · 故障排查 · net/http · Go问答 · 流式响应 · Go FLUSH ResponseController ResponseWriter 代理缓冲 HTTP流式响应
ResponseController.Flush 只负责把 Go 服务端当前可刷新的响应数据向下游推进,并不承诺浏览器或代理立即交付。本文从 ResponseWriter 包装、Flush 错误、响应格式和代理缓冲四条链路定位客户端无数据的原因。108 收藏 -
UDPConn.ReadFrom 没有数据时会持续阻塞。本文用 SetReadDeadline 建立接收时间边界,说明 deadline 的绝对时间语义、循环刷新方式,以及如何区分超时、关闭和真实网络错误。108 收藏 -
Go 中无缓冲结果 channel 如果没有接收方,发送 goroutine 会一直等待。本文用一个具体的结果返回场景说明提前返回为何造成泄漏,并给出取消发送、容量为一的缓冲和通道所有权边界的处理方式。108 收藏 -
Golang · Go问答 | 6天前 | 并发安全 · goroutine · Go问答 · Go结构化并发 runtime/secret并发读取 secret.Do goroutine Go密钥生命周期 WaitGroup敏感数据
runtime/secret 会让作用域内新建的 goroutine 继承秘密模式,但不会替你同步共享切片。本文用结构化并发说明密钥只读共享、worker 独立状态、公开结果复制、取消等待与平台降级的正确边界。107 收藏 -
Go time.ParseDuration 只接受固定的 duration 单位。本文从配置输入场景出发,说明中文单位、未知单位、缺少单位和合法复合时长的处理方式,并给出清晰错误提示的写法。107 收藏 -
Go SJSON 的 Set 会把 Go 值按 JSON 规则编码,SetRaw 则直接写入原始 JSON 片段。本文用数字、字符串、数组和对象示例说明两者的类型边界,并给出动态 raw 输入的校验方案。107 收藏 -
B.Loop 只负责迭代与计时,不会恢复循环外可变状态。切片长度、容量、map 内容或缓冲区会跨轮累积,导致每次操作不再等价。本文用可运行示例区分新建成本与复用成本,并说明重置是否计时。105 收藏 -
huh 表单结束后变量仍是旧值,通常是 Value 绑定了副本、变量被遮蔽,或 Run 没有完成。本文给出指针绑定、状态判断和 Key 读取的排查方法。103 收藏 -
Go toolchain 自动下载失败时,可以根据项目是否允许升级,选择 GOTOOLCHAIN=local 或 go1.x.y+path 固定本地工具链,并检查 go.mod、go.work 与 PATH 中的版本关系。103 收藏 -
Golang · Go问答 | 6天前 | 错误处理 · Context · 并发编程 · go语言 · Go context context.Cause 取消原因 WithCancelCause CancelCauseFunc
context.Cause 返回父级原因,是因为父级取消会向子级传播,而子级或任一父级的首次取消会固定该子级的 cause。本文用两种取消顺序说明 Err、Cause、超时和 WithoutCancel 的边界。102 收藏 -
Golang · Go问答 | 1天前 | JSON · 基准测试 · go · pprof · 性能排查 · 内存分配 encoding/json pprof Go JSON JSON性能 go test benchmark
Go JSON 编解码慢时,不要只看 ns/op。本文用固定输入、benchmem、CPU profile 和内存 profile,区分 JSON 计算热点、短命对象分配与存活堆增长,再按证据选择优化动作。102 收藏 -
go list 看到的模块 Go 版本不等于当前真正执行编译的工具链版本。本文拆解 go.mod 的 go 与 toolchain、GOTOOLCHAIN 自动选择、工作区和 CI 环境差异,并给出一套可复制的排查命令。101 收藏