Go语言技术文章
-
Go regexp 中点号默认不匹配换行,是因为 s 标志默认关闭。本文用最小示例说明 (?s)、局部分组 (?s:...) 与 m 标志的区别,并整理 CRLF 和匹配范围边界。354 收藏 -
Go strings.Split 返回空元素通常不是异常,而是前置、连续或尾部分隔符保留了空字段位置。本文结合代码说明 Split、空分隔符与 Fields 的边界,并给出保留或过滤空字段的判断清单。267 收藏 -
Go archive/zip 找不到中文文件名,通常不是文件内容问题,而是 ZIP 目录项的名称编码标记、实际名称或斜杠路径不一致。本文说明如何判断 NonUTF8、正确创建 UTF-8 文件名,以及外部编码压缩包的处理边界。276 收藏 -
区分tar硬链接与符号链接的目标语义,解释前向引用失败原因,给出延迟依赖解析组件,说明缺失目标、循环依赖、创建错误及接口兼容策略。292 收藏 -
Golang · Go问答 | 1星期前 | 标准库 · 数据校验 · 压缩 · Go问答 · Go compress/gzip io.ReadAll ErrChecksum gzip.Reader CRC-32
Go gzip.Reader 读取内容看似正常,却在末尾返回 ErrChecksum,通常不是解压过程突然失败,而是 Reader 读到 gzip 尾部后发现 CRC-32 或未压缩长度不一致。本文说明完整读取到 EOF 的正确处理方式,并区分截断、错误格式、写入端未 Close 和多成员流等常见原因。428 收藏 -
Go 流式响应一直到处理结束才到客户端,通常不是一个原因。本文拆开服务端 Flush、ResponseWriter 包装器和 HTTP 代理三层,给出可处理 Flush 错误的排查与实现方式。195 收藏 -
Go http.Transport 的 DialTLSContext 会接管非代理 HTTPS 请求的 TLS 连接建立。本文给出带取消条件的自定义拨号写法,并梳理 TLSClientConfig、TLSHandshakeTimeout、ALPN 与 HTTP/2 的配置边界。225 收藏 -
Go ServeMux 没有命中请求时,先按方法、主机和路径三层拆开排查。本文用 Go 1.22 的模式语法解释尾斜杠、通配符、{$}、最具体模式优先和 405 结果,并给出可观察实际命中的写法。391 收藏 -
Go 请求超时后仍看到底层连接,通常不是 context.WithTimeout 失效,而是请求上下文、Transport、连接池和服务端属于不同生命周期。本文给出完整的取消链路、Transport 排查方法和连接状态判断清单。445 收藏 -
Go 的 http.Cookie 通过 SameSite 生成 Set-Cookie 属性,但是否在跨站请求中发送由浏览器决定。本文比较 Strict、Lax、None 的边界,并给出 Go 服务端的配置与排查方法。266 收藏 -
Go 的 http.Client 会根据重定向目标判断是否转发 Authorization。本文从第一跳与下一跳的请求头基线入手,解释敏感头为何跨域丢失,并给出用 CheckRedirect 限制信任边界的安全写法。413 收藏 -
区分json.Decoder读取值流时的正常EOF、截断错误与数组输入,提供复用Decoder的循环和单值尾部检查示例,说明预读缓冲、数据处理及关闭责任。422 收藏 -
Go JSON 出现重复字段时,map、struct 和嵌套对象可能得到不同结果。本文按 encoding/json v1 的处理顺序说明覆盖与合并,并补充 encoding/json/v2 的严格差异和排查清单。111 收藏 -
Go JSON 数字反序列化后精度丢失,通常是因为 interface{} 默认把 JSON number 解码成 float64。本文用一个小型排障示例说明如何选择 int64、json.Number 和 Decoder.UseNumber,避免订单号、时间戳等大整数被悄悄改写。264 收藏 -
Go 批量导入后出现 too many open files,通常与 os.File 未及时 Close、循环 defer 作用域过大或并发峰值过高有关。本文给出单文件生命周期、受控并发和 Linux fd 排查方法。178 收藏