Go教程技术文章
-
Go 的 ast.CommentGroup.Text 面向文档文本,会去掉注释标记、整理空行,并过滤 //line、//go:noinline 等注释指令。本文对比 Comment.Text 与 Text 的职责,说明 ParseComments 的入口和源码工具中的选择方法。317 收藏 -
围绕 testing.F、f.Add、f.Fuzz 和 testdata/fuzz,说明 Go fuzz 测试怎样限制参数边界、控制探索预算,并把失败输入沉淀为普通 go test 可复现的回归样例。316 收藏 -
Go 的 math.Frexp 可以把 float64 拆成归一化尾数和二进制指数,math.Ldexp 再将两者重建为浮点数。本文给出最小写法、配对关系和特殊值边界。316 收藏 -
Go testing/synctest.Sleep 把虚拟时间推进和气泡内等待稳定合并到一起。本文用一个时间驱动的 channel 示例,说明怎样在 synctest.Test 中快速测试延迟逻辑、避免同一时长竞争,并处理调用边界。316 收藏 -
Go regexp.Regexp.MatchReader 接收 io.RuneReader,可以在不先拼接完整字符串的情况下判断流式文本是否包含匹配。本文用 bufio.Reader 说明输入适配、编译错误、布尔结果和 Reader 消费边界。316 收藏 -
通过自动准备临时文件的Go示例,区分Glob有匹配、无匹配与模式语法错误,说明空切片处理和文件系统错误被忽略的限制。316 收藏 -
Zerolog 可以通过 Logger.With 创建带固定业务字段的子日志器。本文用 service、component 与 request_id 区分不同生命周期,说明怎样绑定、注入和复查字段边界,避免共享日志器被动态字段污染。316 收藏 -
用 Go 1.23 的 iter.Pull 把 push-style 迭代器接入一个可复用的 TakeUntil 工具,讲清 next、stop、提前退出和并发边界。316 收藏 -
用 go/types 做静态分析时,Selection.Index 保存的是从接收类型到字段的索引链。本文用两层嵌入结构演示如何还原 Meta.Base.ID 路径,并说明指针、命名类型、FieldVal 与边界错误的处理方式。316 收藏 -
通过FileInfoHeader与SetMode保存Go ZIP文件头的权限信息,说明CreateHeader写入、归档关闭、目录模式和跨平台恢复的区别,并给出普通文件打包示例。315 收藏 -
Go io.Pipe 是同步且无内部缓冲的管道,一次 Write 可能由一次或多次 Read 完成。本文用读缓冲区大小、n 返回值和阻塞条件说明怎样判断读写边界。315 收藏 -
实现 fmt.Formatter 时,内部再次格式化原类型会重新进入 Format 方法。本文用基础类型转换和无方法类型拆开调用链,并说明 verb、flag 与嵌套字段的安全边界。314 收藏 -
Go 1.27 的 go fix unsafefuncs 可以把可识别的 unsafe 指针算术迁移为 unsafe.Add 函数调用。本文说明怎样先用 -diff 预览,再检查字节偏移、对象边界、生命周期和旧工具链兼容性。314 收藏 -
Go encoding/json/v2 默认不给 time.Duration 分配 JSON 表示,直接编码会得到 SemanticError。本文用 FormatDurationAsNano(true) 让它以纳秒数 JSON number 编解码,并梳理嵌套字段、字符串数字与 v1 兼容边界。314 收藏 -
用 Go archive/zip.Reader 逐项读取 ZIP 条目时,把条目内容交给 io.Reader 处理,并把 io.CopyBuffer 的工作缓冲区放到循环外复用,减少批处理中的重复临时分配,同时保留 Close、校验和、ZIP64 尺寸与不安全路径边界。314 收藏