Go教程技术文章
-
Go 的 unique.Handle 适合把重复的可比较值映射为轻量句柄,用句柄比较代替长字符串比较,同时保留 Value 取回原值的能力。本文从标签去重场景出发,拆开 Make、Value、句柄相等和垃圾回收边界,并给出可运行的验证代码。277 收藏 -
在高频日志、协议拼包或批量导出中,fmt.Sprintf 的完整格式化很方便,但单个整数转文本时可能带来不必要的工作。本文用 strconv.AppendInt 与 fmt.Sprintf 的同一输出基准,拆开分配、缓冲区复用和可读性边界,给出可验证的选型规则。277 收藏 -
用一个可复用的 Go HTTP 客户端设置 MaxConnsPerHost,区分总连接上限与空闲连接上限,并掌握按 host:port 判断和验收配置的方法。277 收藏 -
Go ResponseController.SetWriteDeadline 可在单个 HTTP 处理器内控制响应写截止时间,适合流式响应和慢客户端保护。本文讲清最小写法、包装器兼容、错误处理及与其他超时的区别。277 收藏 -
Go archive/tar 只负责读取 tar 条目,不会替应用限制解包路径和磁盘预算。本文用路径归一化、根目录边界检查、单文件上限与总量上限,搭出可迁移的安全解包骨架。277 收藏 -
go/types.Initializer 用 Lhs 保存被初始化的包级变量,用 Rhs 保存初始表达式。本文用多返回值初始化示例说明如何遍历 InitOrder、识别多个变量和判断初始化顺序。277 收藏 -
Go 1.27 新增 bytes.CutLast,可按最后一个分隔符返回 before、after 和 found。文章对比 LastIndex 手写切片,说明缺失分隔符与共享底层数组的边界。276 收藏 -
Go vendor 模式下,不能只看 go.mod 猜依赖版本。本文用 vendor/modules.txt、go list -mod=vendor 和 go version -m 建立从源码目录到最终二进制的核对路径。276 收藏 -
Go fs.Sub 出错时,先区分路径格式错误和子目录访问错误:用 fs.ValidPath 检查 dir,再用 fs.Stat 确认目标存在且是目录,并通过 PathError 与 errors.Is 定位真正失败的操作。276 收藏 -
用 ctx.Err() 判断取消状态,用 context.Cause(ctx) 读取业务原因,掌握 WithCancelCause、WithTimeoutCause 以及父子 Context 的第一次取消规则。276 收藏 -
本文用完整 Go 实例演示如何规范化切片与映射、生成无歧义字符串键,并借助 unique.Handle 为不可比较结构建立稳定身份。276 收藏 -
Go slices.Chunk 会把分组切片的容量裁到长度,但各组仍引用原底层数组。本文说明何时直接消费、何时 slices.Clone,以及指针元素和 Collect 的内存边界。276 收藏 -
Go 的 io.CopyN 可以把流中的固定字节数复制到缓冲区,适合读取并保留协议头原始字节。本文说明 written 与 err 的成功判定、输入过短和底层错误处理,并比较它与 io.ReadFull 的边界。276 收藏 -
Go slog.Handler 的级别筛选可以先用 HandlerOptions.Level 完成固定阈值,再用 Enabled 和 LevelVar 实现可调整策略。本文用最小示例说明过滤位置、代理方法和常见误区。276 收藏 -
用 time.Ticker 做周期任务时,停止条件、空输入和任务错误应该分开处理。本文从 NewTicker、select、context 和 defer Stop 讲清一个可复用的实现边界,并补充 Go 1.23 之后的回收语义。276 收藏