Go教程技术文章
-
Go 1.27 的 go/ast.PreorderStack 在遍历语法树时同时提供当前节点和父节点栈,适合判断嵌套函数、块作用域与调用位置。本文用一个可运行示例说明调用链、栈内容和边界处理。335 收藏 -
用一个最小 HTTP 服务演示 Go 的 http.NewResponseController 如何统一调用 Flush 和 Hijack,并核对包装器与 HTTP/2 不支持时的错误边界。334 收藏 -
context.AfterFunc 的停止函数只负责阻止尚未开始的回调;一旦回调已经启动,调用 Stop 不会等待它结束。本文用可复现代码拆开停止竞态、资源释放和幂等收尾。332 收藏 -
用 Go 泛型拆解 type set、~底层类型与方法集的关系,说明为什么约束能参与类型运算却不一定能直接调用方法,并给出可编译的设计与验收方式。329 收藏 -
讲清 Go time.Timer 复用时 Stop、Drain 和 Reset 的调用边界,并区分 Go 1.23 新语义与旧版本写法,用最小循环和检查清单避免旧值、阻塞与并发复用问题。328 收藏 -
Go 1.26 中实际使用的是 runtime/debug.SetCrashOutput。本文用独立文件接收未恢复 panic 与致命错误输出,说明文件描述符复制、覆盖旧目标和关闭时序的边界。328 收藏 -
Golang · Go教程 | 2天前 | golang · 文件上传 · 性能排查 · net/http · 安全边界 · 文件上传 Go 连接复用 http.MaxBytesReader 请求体限制
Go 的文件上传接口不能只依赖前端限制。本文用 net/http 的 http.MaxBytesReader 包住请求体,拆解限制位置、超限后的 413 响应、读取顺序与连接复用边界,并给出可运行的处理函数和验收清单。327 收藏 -
围绕分块文件生成场景,验证 Go os.File.WriteAt 的独立偏移语义、并发写入边界、短写处理和最终文件验收方法。326 收藏 -
Go encoding/csv 的 FieldsPerRecord 决定每行字段数如何校验:正数固定列数、0 以首行定标、负数允许变化。本文用订单导入场景演示三种模式、错误定位与按行兼容策略。326 收藏 -
Go 的 os.ReadDir 返回 DirEntry,不必立刻为每个目录项读取完整 FileInfo。本文拆开 Type、IsDir、Info 的成本和错误边界,说明排序语义、符号链接判断以及适合目录扫描的最小写法。325 收藏 -
读取用户提供的文件名时,filepath.Join 只能清理字符串,不能阻止符号链接把路径带出目录。Go 1.24 的 os.OpenRoot 与 Root.Open 让相对路径在指定根目录内解析,本文用下载文件场景说明控制流、测试边界和仍需保留的权限检查。325 收藏 -
os.CreateTemp 返回的是已经打开的临时文件,真正容易遗漏的是关闭文件描述符和删除失败残留。本文用一个安全写入配置文件的例子,拆开 Name、Close、Remove 与 Rename 的先后关系,并给出可复查的失败清理路径。324 收藏 -
Go 1.24 引入的 os.Root 可以把文件操作限制在指定目录树内。本文用文件创建场景说明 Root.OpenFile 的相对路径、创建标志、符号链接和错误检查边界。323 收藏 -
支付、下单或重试场景里,Go HTTP API 需要区分同一请求的安全重放与参数冲突。本文从调用方体验出发,设计 Idempotency-Key 的语义、存储状态、过期策略和错误响应,并给出可运行的 Go 示例。317 收藏 -
把多项错误拼成字符串会丢掉可判断的错误链。本文以校验、写盘和关闭资源为例,演示如何迁移到 errors.Join,保留 errors.Is 判断能力,并处理 nil、重复错误与 errors.Unwrap 的边界。316 收藏