Go语言技术文章
-
Go 文件下载接口不能只拼接用户传入的文件名。本文用 filepath.Rel 计算相对路径,拒绝跳出下载根目录的请求,并通过 http.ServeFile 返回文件。480 收藏 -
Go 1.23 引入 runtime/debug.SetCrashOutput,可把未处理 panic 和致命运行时错误额外写入文件。本文用一个可运行的最小例子解释文件句柄复制、关闭时机、覆盖规则与并发替换边界。125 收藏 -
Golang · Go问答 | 2个月前 | web安全 · net/http · Go问答 · origin csrf Go 1.25 http.CrossOriginProtection Sec-Fetch-Site
Go 1.25 的 http.CrossOriginProtection 能拦截非安全跨源浏览器请求。本文从 Handler 接入、Origin 白名单和安全方法边界说明它适合替代哪些旧防护,以及上线前要补的检查。466 收藏 -
Go database/sql 查询完成后,Rows.Close 仍可能报告驱动或网络错误。本文用一个可复现的事务流程说明关闭、读取错误与 Commit 的检查顺序。400 收藏 -
text/template 默认会把缺失 map 键渲染成,missingkey=zero 返回元素零值,missingkey=error 则在模板运行阶段停止。本文用可运行示例梳理三种行为与上线选择。 114 收藏 -
处理用户传入的文件名时,先用 filepath.IsLocal 做词法边界检查,再把通过的路径交给 filepath.Join;本文说明 Clean、绝对路径、空字符串和符号链接之间各自能解决什么问题。413 收藏 -
sync.OnceFunc 不只是把 sync.Once 包了一层:初始化函数一旦 panic,返回函数会记住同一个 panic 值,并在后续调用中再次抛出。本文用最小代码拆开执行次数、并发等待与失败缓存的边界。497 收藏 -
Go 泛型调用报错时,问题常常不在类型参数本身,而在约束的类型集、方法集与调用点能否同时建立推导方程。本文用三个最小例子拆开接口约束、显式实例化和返回值推导的边界。228 收藏 -
Go fuzzing 里,F.Add 负责把开发者已知的边界样本放进种子语料,F.Fuzz 再从这些样本出发进行覆盖引导的变异;失败输入保存到 testdata/fuzz 后,会成为后续 go test 默认执行的回归样本。311 收藏 -
Go 1.24 的 encoding.TextAppender 允许类型直接把文本表示追加到已有字节切片。本文用 AppendText 与 MarshalText 对比,说明何时能减少临时分配、如何保持语义一致,以及实现和基准中的边界。332 收藏 -
批量导出或生成大文件时,不要先拼成一个巨型字节切片。本文用 io.Copy、os.CreateTemp 和 os.Rename 组成流式落盘链路,说明内存边界、失败清理和原子替换如何配合。122 收藏 -
slog.Logger 写日志前会先询问 Handler.Enabled。把昂贵的参数构造放到级别判断之后,可以避免被过滤的日志仍然消耗 JSON 序列化、查询和字符串拼接成本。381 收藏 -
Go 1.25 的 sync.WaitGroup.Go 把启动 goroutine、计数和完成收口放进一个方法,但它不负责取消任务,也要求 f 不发生 panic。本文用一个批处理示例拆开调用链、闭包变量和复用边界。174 收藏 -
Go 的 http.Client.Timeout 覆盖整个请求生命周期,而 Transport.ResponseHeaderTimeout 只等待响应头。把两者放在一起理解,才能避免响应体读取被误判成连接超时。205 收藏 -
用 bytes.Reader.WriteTo 把内存中的字节流交给 io.Writer,重点核对读取游标、短写返回和 Reader 复用时的状态边界。373 收藏