Go语言技术文章
-
Go net.Dialer 返回空连接时,先分清空地址、地址格式、名称解析和连接失败四个阶段。本文用 DialContext、SplitHostPort、Resolver 与错误链说明如何定位边界输入。343 收藏 -
从 HTTP 客户端接线、连接复用、超时作用范围和代理及自定义 TLS 分支定位 net.Dialer 看似不生效的原因,并提供客户端构造示例。279 收藏 -
Go io.ReadFull 用 n 和 err 表示固定长度读取是否完成:空读到 EOF、部分读取到 ErrUnexpectedEOF,以及底层读取错误需要分开处理。本文给出稳定的判别代码和协议头读取边界。432 收藏 -
bufio.Writer.Available 返回内部缓冲区尚未使用的字节数。本文区分 Size、Buffered、Available 和 Flush,说明写入前后如何判断剩余空间、为什么大写入不等于必然失败,以及 AvailableBuffer 的使用边界。194 收藏 -
Go bufio.Scanner 的空结果可能来自空输入、空行、空白词、超长 token 或自定义分割规则。本文用最小实验区分 Scan、Text 和 Err 的边界,并给出 Buffer 与排查清单。368 收藏 -
用 AppendFormat 直接向字节缓冲追加时间,结合日志批次说明容量复用、返回值、写入错误及同步与异步消费的所有权边界。475 收藏 -
Go time.Time 不会保存解析错误,time.Parse 返回的 error 需要与时间值分开处理。本文用 (time.Time, error)、%w 和 errors.As 说明如何保留 ParseError、添加业务上下文,并区分零值、时区与序列化边界。228 收藏 -
Go 的可选时间字段不要只靠一个特殊日期来猜。本文对比 time.Time 零值、*time.Time 的 nil 语义和显式 Valid 包装,说明它们在判断、JSON 编解码与持久化边界上的适用场景。399 收藏 -
Go io.ReadAll 会持续读取到 EOF 并返回完整字节切片,面对请求体或文件输入时不能把内存上限交给输入方。本文用 io.LimitReader、io.Copy 和分块读取给出可控方案,并说明触及上限后的错误处理。298 收藏 -
Go strings.Cut 不只是把字符串分成两段,还能通过 found 判断分隔符是否存在。本文用配置项解析示例说明如何保留原始输入、区分缺失分隔符与空字段,并用 %w 保留底层错误原因。400 收藏 -
Go strings.Cut 处理可选字段时,关键是同时保留 before、after 和 found:字段不存在与字段存在但值为空不能混为一谈。本文用首个键值分隔符的解析例子说明返回值、空分隔符、可选字段结构,以及 Cut 与 SplitN、CutPrefix、CutSuffix 的边界。186 收藏 -
Go slices.Compact 只会删除连续相等元素,直接用于 []error 时还会遇到错误实例身份和可比较性的边界。本文用 CompactFunc 按错误码、消息保留第一条原始错误,并说明何时应该改用 map 做全局去重。378 收藏 -
通过原地压缩减少结果切片分配,并明确相邻去重、返回长度、别名共享和长期容量保留的取舍。256 收藏 -
maps.Clone 会复制 map 的键和值,因此 map[string]error 中的错误值、Error 文本和错误链入口都会保留;但它是浅拷贝,不会复制错误对象内部的指针、切片或自定义可变状态。492 收藏 -
Go log/slog.Logger 减少临时分配的关键不是盲目复用对象,而是让日志调用尽早走 Attr 路径:优先使用 LogAttrs 和类型化 Attr,把稳定上下文交给 With 预处理,只对昂贵参数做 Enabled 预判断。本文结合调用路径、属性复用和适用边界说明具体写法。417 收藏