Go教程技术文章
-
Go 1.26 允许 new(expr) 直接从表达式推断指针类型。本文用切片和映射对比旧写法,说明零值、可写性、类型推断和迁移检查边界。366 收藏 -
从配置文件落盘权限不符合预期的现场出发,拆解 Go os.WriteFile 的 perm、Unix umask、首次创建与覆盖已有文件的差异,并给出可复现的检查和修正边界。364 收藏 -
从一个可重复触发的 Go 定时任务出发,拆解 time.Ticker 的停止顺序、退出信号、重复 Stop 边界和可验收的收尾写法。364 收藏 -
调用 time.Ticker.Stop 后,程序仍可能处理一次已经进入通道的时间值。关键不在于 Stop 会不会清空通道,而在于退出信号、通道消费和任务收尾的顺序。本文用可运行示例拆开这个边界。363 收藏 -
Golang · Go教程 | 1星期前 | 标准库 · 性能优化 · 字符串处理 · Go教程 · 内存分配 strings.Split Go 1.24 Go 迭代器 Go strings.SplitSeq
Go 1.24 的 strings.SplitSeq 返回迭代器,适合边读边处理分隔文本。本文对照 Split 的切片语义,验证空分隔符、连续分隔符和提前停止,并说明什么时候不该为了省一个切片改写代码。363 收藏 -
io.LimitedReader 用 N 限制读取量,但读满上限不等于底层输入结束。本文用剩余字节、EOF 与下一次读取拆开判断,给出处理固定长度帧和保留尾部数据的 Go 写法。363 收藏 -
解释 GOGC、heap goal 和分配速率的关系,建立 Go 服务内存预算。362 收藏 -
Golang · Go教程 | 1个月前 | 文件下载 · Go教程 · 审计日志 · 接口安全 · 路径穿越 · Go 文件下载 审计日志 HTTP接口 filepath.Clean 安全下载 路径穿越
Go 文件下载接口不能只把用户传入的 path 直接 Join 后打开。安全做法是固定下载根路径,先做 Clean,再确认最终路径没有越界,同时配合扩展名白名单、大小限制、只读打开和审计记录。362 收藏 -
Golang · Go教程 | 1星期前 | 标准库 · go · 性能监控 · GC · runtime/metrics · 运行时指标 Go runtime/metrics GC周期 Float64Histogram
Go runtime/metrics 可以直接读取运行时导出的 GC 周期、堆对象和暂停时间指标,但采样时不能把累计计数当成单次耗时,也不能忽略指标类型。本文用采样器拆解 /gc/cycles/total:gc-cycles、/gc/pauses:seconds 与 Float64Histogram 的读取、换算和验收边界。362 收藏 -
bufio.Scanner 默认缓冲区遇到超长日志行会返回 ErrTooLong。本文用可复现的日志读取场景说明如何设置 Buffer、何时改用 bufio.Reader,以及怎样验证内存和错误边界。361 收藏 -
bufio.Writer.Flush 遇到底层 Writer 短写时,会把未写完的数据留在缓冲区并记住错误。本文用可控的 io.Writer 演示状态变化、错误传播和安全恢复边界。361 收藏 -
Go 结构体嵌入让外层类型获得更短的字段和方法访问路径,但多个嵌入成员出现同名字段或方法时,编译器会按层级和提升规则处理。本文从一个真实的编译错误切入,拆解显式访问、同级冲突和方法集变化,并给出排查清单。360 收藏 -
Go sync.Pool 适合复用短生命周期、可丢弃的临时对象,但 Put 时机和数据残留很容易写错。本文用 HTTP 响应缓冲区小实验说明 Get、Reset、Put 的边界,再用基准测试验证复用是否真的值得。359 收藏 -
用 Go 原生 fuzz 测试把线上边界输入沉淀为种子语料,说明失败样本如何复现、加入回归集,并在 CI 中验收执行结果。358 收藏 -
用 time.ParseDuration 解析带小数、负号和多个单位的时长,区分语法错误与 Duration 溢出,并给出可复用的校验写法。358 收藏