Go语言技术文章
-
Go image/draw 的核心是让目标矩形 r.Min 与源点 sp 对齐。本文从目标画布、偏移坐标、Over 与 Src、非零边界和裁剪规则出发,给出可复用的偏移绘制方案。294 收藏 -
Go net.Pipe 没有内部缓冲,读写可能一直等待对端动作。本文说明怎样设置 deadline,并用 errors.Is、net.Error 和关闭错误区分超时、对端关闭与其它网络错误。294 收藏 -
Go runtime/trace.Logf 适合把带分类和格式化参数的一次性消息写入执行追踪。本文说明 trace.Start/Stop 的生命周期、context 传递、Logf 与 Log 和 WithRegion 的边界,以及高频场景中的开销控制。294 收藏 -
slices.Clip 会把切片容量收紧到长度,让后续 append 无法复用原切片的容量尾部;本文解释它与三下标切片、slices.Clone 的区别,以及共享元素和并发边界。294 收藏 -
Go regexp.Compile 遇到重复命名分组时,先确认同名捕获组本身可以被接受,再用 syntax.Error 的 Code 和 Expr 定位真正的语法错误,并结合 SubexpNames 与 SubexpIndex 读取同名组索引。294 收藏 -
Participle 的错误对象已经携带 lexer.Position,可以用 errors.As 提取 ParseError,输出文件名、行号、列号和 Message,并正确区分普通错误。293 收藏 -
bytes.Buffer.Available 返回的是底层缓冲区尚未使用的容量,不是当前可读数据长度。本文结合 Len、Cap、Grow 和 AvailableBuffer,说明如何判断追加空间并安全复用缓冲区。293 收藏 -
Go 反射读取无符号整数时,直接调用 Value.Uint 可能因 Kind 不匹配而 panic。本文用 CanUint 作为读取前的保护,说明无效 Value、Interface 包装、可读取 Kind 和 uint64 返回值的边界。293 收藏 -
Go 集成测试同时依赖被测包和上层组件时,可用 package foo_test 把测试放到依赖图上层,再用 export_test.go 提供有限的测试期辅助入口,避免 import cycle not allowed in test。293 收藏 -
批处理遇到多个失败项时,可以先收集非 nil 错误,再用 errors.Join 保留完整错误树。本文说明 errors.Is、errors.As 与 Unwrap() []error 的关系,并给出减少额外分配的循环写法。293 收藏 -
Go token.File.PositionFor 的 adjusted 控制是否采用替代位置信息,可能改变文件名和行列,但不改变原始偏移。本文用同一 Pos 对照示例,解释诊断显示、源码编辑与回退策略。293 收藏 -
Go 标准库 flag 的 String 适合单值参数,但命令行工具经常需要重复传入 -include。本文比较单值、逗号分隔、flag.Func 和自定义 flag.Value 四种方案,给出可直接复用的切片收集实现,并说明默认值、空值和 FlagSet 隔离场景。292 收藏 -
Go modules 用主模块 replace 将依赖源码映射到本地模块根目录,保留原 import 与 require。通过原创联调示例说明版本范围、工作区影响、CI 路径风险和撤销替换的方法。292 收藏 -
Go 时间格式化与本地时区不同,通常来自时间值 Location、输入解析语义或部署环境差异。通过显式加载业务时区、使用 In、区分 ParseInLocation 与展示转换,并为容器提供时区数据,避免固定加小时造成错误。292 收藏 -
QueryUnescape 遇到不完整或非十六进制的百分号转义时会返回 EscapeError。本文说明如何保留原始值、定位坏片段、理解加号语义,并处理 ParseQuery 的部分成功结果。292 收藏