Go语言技术文章
-
Go io.Copy 返回 short write 时,问题通常在目标 Writer:它少写了数据却没有返回具体错误。本文用返回值、Writer 契约和 WriterTo/ReaderFrom 快路径区分读端错误与写端短写。336 收藏 -
用 Go container/ring 实现固定容量的最近采样窗口,说明如何写入、覆盖最旧值,并按时间顺序导出有效数据。110 收藏 -
Scanner.Bytes 返回的是可能被下一次 Scan 覆盖的底层字节视图。本文解释前面行会变化的原因,并给出 string、bytes.Clone 和 bufio.Reader 的选择。192 收藏 -
用 Go 的 container/heap 实现一个按优先级领取任务的队列,说明 Less、Push、Pop、heap.Init、heap.Fix 的配合方式,以及指针接收者、索引同步和并发使用边界。397 收藏 -
Go 的 Write 返回成功不代表文件已经写出:使用 bufio.Writer 时,数据可能仍在缓冲区。本文用一个完整写文件函数说明 Flush、Close、路径和打开模式的排查顺序。116 收藏 -
用 Go 泛型和 comparable 约束写一个保持顺序的切片去重函数,覆盖 int、string、自定义结构体及不可比较元素的处理边界。473 收藏 -
Go 用 IP 连接 HTTPS 时,TCP 地址、TLS ServerName、SNI 和证书 SAN 不是同一个概念。本文解释证书域名不匹配的原因,并给出保留校验的安全写法。364 收藏 -
Go 命令行读取密码时,可用 golang.org/x/term.ReadPassword 关闭本地字符回显。本文比较不同输入方式,并说明非终端错误、换行处理和敏感字节清理。288 收藏 -
Go net.Pipe 没有内部缓冲,Write 即使只写少量数据也要等待对端 Read。本文解释阻塞原因,给出并发读写、deadline 和 Close 的排查与处理方式。497 收藏 -
Go 命令行表格不要手工补空格,使用 text/tabwriter 把每列写成制表符终止的单元格,再调用 Flush 输出。本文说明 NewWriter 参数、尾部制表符、中文宽度和适用边界。233 收藏 -
Go SetDeadline 设置的是连接上的绝对读写期限,不是只作用于下一次调用。本文说明总耗时与空闲超时的区别、方向 API 的选择、超时判断和并发复查方法。438 收藏 -
Go 读取邮件时,mail.ReadMessage 负责拆分邮件头,中文 Subject 用 mime.WordDecoder.DecodeHeader 解码,中文 From 则用带 WordDecoder 的 AddressParser 解析;遇到 GBK 等字符集时再补 CharsetReader。485 收藏 -
Go 处理 IPv6 host:port 时不能直接按冒号拆分,本文用 net.SplitHostPort 和 net.JoinHostPort 说明方括号、zone、端口边界及异常输入处理。219 收藏 -
Go 默认会按操作系统的解析规则查找域名。需要固定 DNS 服务器时,可以给 net.Resolver 配置 Dial 回调,再把它接入 net.Dialer.Resolver,让 LookupHost 或 HTTP 客户端使用同一套解析策略。351 收藏 -
Go 1.22 及以上可在 ServeMux 中注册命名通配符,并用 Request.PathValue 读取路径参数。本文区分单段参数与剩余路径,说明空值排查、转义边界和旧版兼容检查。499 收藏