Go教程技术文章
-
从 context.WithTimeout、Done 和 Err 的真实控制流出发,说明为什么设置超时不等于 goroutine 自动停止,并给出可验证的退出写法。287 收藏 -
Go 的 log/slog 会先通过 Logger.Enabled 和 Handler.Enabled 判断日志级别,再决定是否构造记录并交给 Handler.Handle。本文用可运行示例拆开这条调用链,说明昂贵属性计算该放在哪里,以及如何用测试确认过滤边界。352 收藏 -
用一个共享计数器测试说明 t.Parallel 的调度边界,再配合 go test -race 和失败证据,让并发问题能稳定复现、定位并回归。207 收藏 -
并发任务一旦失败,普通取消信号往往只告诉调用方“停了”,却丢掉了真正原因。本文用 context.WithCancelCause 组织一个批量读取示例,让首个失败原因沿 ctx.Done 传回协调函数,并验证取消、错误回收和结果输出的边界。321 收藏 -
go/token 把源文件位置压缩成 Pos,真正输出错误时还要经过 FileSet.PositionFor。本文用多文件和 //line 场景说明 adjusted、文件偏移与诊断文本如何对应,并给出可复现的核对方式。367 收藏 -
Go 泛型代码需要把类型交给反射注册表时,reflect.TypeFor 可以直接取得类型描述;再配合 AssignableTo 校验注册边界,避免用空值和类型断言绕一圈。291 收藏 -
用 Go io.Copy 处理上传、代理和文件转存时,先限制输入边界,再利用 ReaderFrom 的快路径,最后用可复现基准确认吞吐与内存变化。409 收藏 -
Go 的 regexp.Expand 和 ExpandString 可以把正则捕获结果写入模板。本文从命名捕获组、模板边界和字节切片复用出发,给出可验收的替换写法,并说明空捕获组与并发使用时的注意点。402 收藏 -
用 Go net/url 的 URL.JoinPath 拼接接口路径,厘清多斜杠、./、../ 与 PathEscape 的边界,并通过可运行示例验收最终请求地址。160 收藏 -
线上只拿到一个 Go 二进制时,debug.BuildInfo 可以帮助你还原构建工具链、主模块、依赖模块与 VCS 设置。本文用 ReadFile 和 ReadBuildInfo 组成一套发布验收流程,并说明模块模式、裁剪信息与脏工作区的边界。200 收藏 -
用 Go regexp.Regexp.FindReaderIndex 在 io.RuneReader 上定位流式文本匹配,解释返回值为何是字节区间、UTF-8 字符如何换算,以及为什么方法可能继续向后读取。120 收藏 -
用 base64.Encoding.Strict 对比普通解码,验证末尾填充位、CorruptInputError 和 DecodeString 的错误边界,给出可复现的 Go 示例。252 收藏 -
接口收到一段无法解析的 JSON 时,json.Decoder.InputOffset 可以提供稳定的字节位置。本文用一个请求体校验器串起 Decode、InputOffset、错误截取和边界保护。344 收藏 -
用 Go runtime/metrics 读取 Float64Histogram,理解 Buckets 与 Counts 的对应关系,并用快照估算延迟分布的中位数和高分位边界。197 收藏 -
用 Go io.ReadFull 读取固定长度协议,区分 io.EOF 与 io.ErrUnexpectedEOF,并根据 n 和 err 做可靠的缓冲区验收。374 收藏