Go教程技术文章
-
Go 1.27.1 是小版本升级,但官方修复范围触及 cgo、编译器、runtime 和多个标准库。本文把这些范围映射成构建、运行与接口行为回归矩阵,帮助项目决定直接升级、灰度还是保留临时回退开关。240 收藏 -
Go 的 string 下标按 UTF-8 字节计算,直接截取中文可能产生乱码。本文用 []rune、range 和 unicode/utf8 说明安全的按字符截取、计数与非法编码处理方式。240 收藏 -
用临时名、冲突预检查和倒序移动日志实现 Go 批量重命名;同一文件系统内任意一步失败时恢复已完成的改名,并说明进程崩溃、并发和跨盘边界。240 收藏 -
用 httptest.NewServer 搭建三段重定向链,演示默认客户端跟随、CheckRedirect 记录每一跳,以及 ErrUseLastResponse 停止跟随时的断言和 Body 清理。240 收藏 -
Go 的 math/big.Int.SetString 通过第二个参数 base 指定进制:固定格式传明确进制,带 0b、0o、0x 前缀的输入可传 0 自动识别。本文说明返回值、下划线和不可信输入的处理边界。240 收藏 -
go/ast.Preorder 从 Go 1.23 开始返回 iter.Seq[ast.Node],适合用 range 按深度优先顺序读取语法树。本文用一个真实的 AST 分析小工具说明如何解析源码、按节点类型筛选、在找到目标后自然停止,并比较 Inspect 的控制方式。239 收藏 -
embed.FS 读取静态资源时,文件路径必须遵守 io/fs 的相对路径规则。本文用 assets/ 与模板读取场景说明路径前缀、fs.ValidPath 和 fs.Sub 的边界,给出可复用的校验与测试写法。239 收藏 -
Go 数据竞争往往不是每次都能复现。本文用 go test -race 接入高覆盖测试,并从读写访问栈和 goroutine 创建栈定位共享状态边界,最后给出修复后的复测清单。239 收藏 -
Go testing.T.Cleanup 回调 panic 不会被静默忽略。本文说明清理时机、后进先出顺序、测试主体 panic 与 cleanup panic 的区别,并给出用 t.Errorf、局部 recover 和 go test 排查重复清理与并发边界的写法。239 收藏 -
解释 Go http.Request.Clone 为什么不能让多个请求重复读取同一份 Body,并给出受限缓存、独立 Reader 和 GetBody 重试方案。237 收藏 -
slices.Collect 能把 iter.Seq 变成切片,但空序列的结果、容量预估和重复遍历边界容易被忽略。本文用最小代码拆开收集过程,并给出选择容量策略的判断方法。236 收藏 -
Go 1.22 引入的 cmp.Or 可以从命令行、环境变量、配置文件和默认值中按顺序取首个非零值。本文用多层配置示例说明泛型约束、零值语义、布尔开关和表达式求值边界。236 收藏 -
Go strings.Builder 的 String 方法返回当前累计内容,后续 Write 是继续修改 Builder,而不是直接修改已经得到的 string。文章解释 Builder 缓冲区与字符串值的边界,并给出单一所有者、禁止复制非零 Builder、并发隔离和按需 strings.Clone 的处理方式。236 收藏 -
bytes.Buffer 的 Grow 不是越大越好:它只保证后续写入有足够空间,Len 与 Cap 观察到的是不同维度。本文用请求拼装和最小测试说明如何估算容量、何时提前 Grow,以及如何验证扩容是否真的减少了分配。234 收藏 -
Go 的 HTTP Trailer 不在 Response.Header 中,客户端要先把 Body 读到 io.EOF,再从 Response.Trailer 读取响应体末尾的字段;服务端则要在写响应前声明 Trailer。234 收藏