Go语言技术文章
-
Go 的 URL.Path 保存解码后的路径,RawPath 只用于保留有效的原始编码提示;如果把已编码字符串直接放进 Path,URL.String 或 HTTP 客户端会再次转义百分号,形成 %252F。493 收藏 -
用 strings.Builder 拼接大量片段时,按字节数估算 Grow 容量,按输入类型选择 WriteString、Write、WriteByte 或 WriteRune,并避开 []byte 到 string 的多余转换与非零 Builder 复制。355 收藏 -
Go 的 HTTP 响应头必须在第一次 WriteHeader 或 Write 之前设置;本文用 handler 分支说明隐式 200、最终状态码、http.Error 与 trailer 的边界。424 收藏 -
高频日志过滤不要在每条日志到来时重新解析正则。本文用一个小型过滤器演示 regexp.Compile 的初始化时机、*regexp.Regexp 的并发复用,以及动态改规则时如何隔离可变配置。447 收藏 -
ReadHeaderTimeout 保护请求头读取,WriteTimeout 限制响应写回,IdleTimeout 只管理 keep-alive 连接等待下一请求。本文按请求阶段比较三者的边界、重置规则和回退关系,并给出普通接口、慢上传与长响应的配置判断方法。266 收藏 -
用 SyntaxError、UnmarshalTypeError 和 Decoder.InputOffset 区分 JSON 错误口径,并把字节偏移、字段路径、原始片段和业务记录写进可检索日志。152 收藏 -
解释 Go HTTP 客户端总超时与 Transport 阶段超时的覆盖范围,说明 DNS、TCP、TLS、响应头和响应体分别该由什么配置控制。499 收藏 -
Go 接口遇到同一字段有时返回字符串、有时返回数字时,可以为局部类型实现 UnmarshalJSON。本文用 json.RawMessage 区分输入形态,说明别名类型、null、空字符串与非法值的处理边界。281 收藏 -
Go 的 http.Client 返回响应后,Response.Body 不读取、不关闭,或每次新建 Client,都可能让 Transport 无法复用持久连接。本文用原创示例拆开 Body 生命周期、读取策略和连接池排查方法。489 收藏 -
当同一个 JSON 接口的内部字段会随 kind 改变时,可以先用 json.RawMessage 保留 payload,再按判别字段选择具体结构体二次解析。本文给出可复用的 Go 分层解析写法,并说明未知类型、空载荷和错误处理边界。340 收藏 -
Go 1.20 的 context.WithCancelCause 可以把具体错误随取消信号传给下游。本文区分 ctx.Err() 与 context.Cause(ctx),说明首个取消原因、父子 Context 传播和常见误用。170 收藏 -
Go encoding/xml 解析重复的同名节点时用切片接收,遇到多层 XML 则用结构体嵌套或 a>b 标签路径表达层级。本文用一个订单 XML 说明标签映射、列表顺序、未知节点和最小验证。343 收藏 -
context.WithCancel 的 cancel 不只是结束信号,也负责解除父子 context 关联。本文用 Go 代码说明不调用 cancel 时的泄漏边界、正确写法和排查清单。367 收藏 -
用 Go text/template 的命名模板和 ExecuteTemplate,让同一个 Report 数据对象输出纯文本与 Markdown,并说明 define、Parse、字段路径和 html/template 的边界。344 收藏 -
Go Timer.Reset 前处理旧事件的原因、Stop 与非阻塞 drain 的兼容写法,以及 Go 1.23 后同步定时器通道带来的版本边界。492 收藏