Go语言技术文章
-
io.Pipe 消费端提前退出后,应先用读端 CloseWithError 通知写端,再等待生产协程。本文区分两端关闭职责与错误传播,给出有限数据示例,并说明 nil、重复关闭、部分写入和上游阻塞的处理范围。185 收藏 -
Go io.Copy 本身不会因为文件很大就把整个文件读入内存。遇到内存异常增长时,应先检查 WriterTo、ReaderFrom 快路径,再排除 bytes.Buffer、io.ReadAll 和长期引用等累计路径。471 收藏 -
io.LimitedReader 的 N 是剩余读取预算,不是底层文件或网络流的真实长度。本文按 N、读取字节数和 error 分层判断达到上限、源数据提前 EOF 与其他错误,并给出固定长度读取的选择。337 收藏 -
strings.Reader.Seek 的 offset 是字节偏移,whence 决定它相对开头、当前位置还是结尾计算。本文用 UTF-8、边界错误和可重复读取示例说明为什么会读到错误位置,以及如何检查返回位置和错误。366 收藏 -
Go strings.Replacer 适合把多组固定文本替换规则集中管理。本文说明 NewReplacer 的成对参数、重叠键的顺序、Replace 与 WriteString 的选择,以及规则复用时的边界。122 收藏 -
Go 解码无填充标准 Base64 应按协议选择 RawStdEncoding,而非随意删除等号。本文解释填充分组、解码器选择和错误时的部分数据,给出入口封装,并说明兼容迁移、Strict 与空白处理的范围。366 收藏 -
Go 中 json.Valid 通过并不代表 json.Unmarshal 一定成功。本文从语法有效、目标类型匹配和目标参数合法三个层次,说明如何用错误类型、字段路径和偏移量定位解码失败。199 收藏 -
Go database/sql 的 PingContext 超时不能只靠调大时间解决。本文用有限上下文拆分调用取消、驱动失活连接和配置错误,并说明探活与连接池后续查询之间的边界。283 收藏 -
Go 中给 net.Resolver 设置 Dial 后仍访问默认 DNS,通常不是地址写错,而是当前平台没有选择 Go 内置解析器。本文解释 Resolver.Dial 与 PreferGo 的组合边界,并给出接入 HTTP Transport、处理平台差异和保留回退路径的写法。275 收藏 -
Go 用 netip.ParseAddr 解析 IPv6 失败时,先区分纯地址、带接口 Zone 和带端口文本;带端口改用 ParseAddrPort,带 Zone 则通过 Addr.Zone 读取。本文给出最小写法、错误分支和迁移清单。159 收藏 -
Go 监听 socket 选项不生效,应先确认 ListenConfig 是否接入实际监听路径,再检查 Control 的绑定前时机、实际网络名称及两层错误。本文给出 Linux 示例,并说明跨平台实现和选项读回的判断范围。242 收藏 -
Go TCP 连接空闲后被 NAT、负载均衡或防火墙回收时,KeepAlive 只能帮助本机探测连接状态,不能替代中间设备策略。本文说明 net.Dialer、KeepAliveConfig、应用心跳和重连的边界。116 收藏 -
Go TLS 握手卡住时,不要只给 TCP 建连设置超时。通过 DialContext 约束建连、HandshakeContext 约束 TLS 握手,并在失败路径关闭连接,可以让取消信号真正覆盖卡住的握手阶段。453 收藏 -
Go 配置 CipherSuites 后连接失败,需先区分协议版本与套件范围。本文解释 TLS 1.3 配置限制、TLS 1.2 兼容条件及握手观测方式,并提供保留证书验证的诊断代码。130 收藏 -
Go TLS 客户端连接自签名服务失败时,通常不是把校验关闭,而是正确构造 RootCAs。本文说明如何保留系统根池、追加自签名 CA,并区分信任链与主机名错误。427 收藏