Go语言技术文章
-
Go 的 time.Ticker 停止后不会关闭 ticker.C,后台消费 goroutine 仍可能残留。本文用停止信号、context 和 WaitGroup 拆开 ticker 停止、循环退出与任务收尾,说明何时使用 NewTicker、Tick 和 Reset。297 收藏 -
Golang · Go问答 | 1个月前 | 连接池 · HTTP客户端 · Go问答 · TIME_WAIT httptrace http.Transport Go transport Go端口增长 HTTP连接复用 CLOSE_WAIT
Go 出站端口增长要先区分 ESTABLISHED、TIME_WAIT 和 CLOSE_WAIT,再用 httptrace 判断 Transport 是否复用。本文从响应体收尾、长期复用 Transport、连接边界和 socket 检查四个方面给出排查方法。297 收藏 -
处理键值文本时,strings.Cut 适合围绕第一个分隔符取左右两段,strings.Split 适合获取全部片段。本文用 Go 示例说明两者的返回语义、空字段、缺少分隔符和空分隔符边界,并给出选择方法。297 收藏 -
time.AfterFunc 的 Timer.Reset 返回 false,只说明旧定时器已经到期或停止,不代表旧回调已经结束。本文用 started/finished 信号说明如何判断旧回调状态,并避免新旧回调并发访问共享数据。297 收藏 -
Decoder.UseNumber 只把 interface 中的 JSON 数字保留为 json.Number,避免先转 float64;它不会替目标类型检查范围。转换为 int64、uint64 或 big.Int 时仍要检查错误与业务上限。297 收藏 -
用 Go 标准库统一处理 JSON 未知字段、大整数与金额精度、RFC3339 时间,并给出可复用的解码入口和边界检查。297 收藏 -
Go hex.Dumper 的 Write 可能在输出行头、字节区或整行收尾时遇到底层 Writer 错误,而不足 16 字节的尾行要等 Close 才补齐。本文给出保留首个错误、正确处理 Close 并明确资源关闭责任的写法。297 收藏 -
连续压缩多段独立数据时,可以保留一个 flate.Writer,用 Reset 切换输出目标并复用内部状态;Flush 只用于流未结束时刷出当前数据,Close 才完成最终收尾。297 收藏 -
bytes.Lines 返回一个按行迭代的 iter.Seq[[]byte],通常保留每行末尾的换行符,未以换行结束的末行也会被返回。本文说明它的边界,并对比 bytes.Split 与 bufio.Scanner 的适用场景。297 收藏 -
Go 中接收方直接关闭数据 channel,会让仍在发送的 goroutine 遇到 send on closed channel panic。本文从关闭语义、channel 所有权、done 停止信号和多生产者协调四步,给出可落地的退出协议。297 收藏 -
Go reflect.Value.CanSet 为 false 时,先区分反射值是否可寻址,再检查字段是否来自未导出成员。本文用值副本与指针 Elem 对比,说明怎样安全修改导出字段,以及为什么未导出字段不应绕过封装。297 收藏 -
Golang · Go问答 | 1个月前 | 流式处理 · 工程实践 · net/http · Go问答 · Go HTTP服务器 请求体 流式请求 EnableFullDuplex http.ResponseController
http.ResponseController.EnableFullDuplex 解决的是 HTTP 服务端同时读取请求体和写出响应的边界问题。本文用一个边读边回传的 Go Handler 拆开它的默认行为、启用时机、协议限制和测试检查点,说明什么时候该用,什么时候不该把它当成通用加速开关。296 收藏 -
用一个可运行的 Go 客户端示例验证 NewRequestWithContext 的构造顺序、取消传播和 nil context 边界。296 收藏 -
用 Go 的 url.Values、Has、Get 和 ParseQuery 区分查询参数的缺失、空值、重复值与编码错误,并说明 Add、Set、Encode 的写回规则。296 收藏 -
Go 模板 Parse 成功只说明模板文本通过了解析,Execute 仍可能因结构体字段、map 键、方法、函数注册、嵌套模板或 Writer 错误而失败。本文按执行边界整理排查顺序和最小示例。296 收藏