Go语言技术文章
-
io.ReadAll 写起来很短,但它会把输入完整收集到一个字节切片中。本文从大响应和未知长度输入的现场出发,解释 len/cap 增长、峰值内存与分块读取的边界,给出可复查的 Go 代码。231 收藏 -
Golang · Go教程 | 1天前 | 日志 · 标准库 · 性能 · Go教程 · log/slog · Go 日志级别 log/slog Logger.Enabled Handler.Enabled Attr
Go log/slog 的 Logger.Enabled 会在日志参数处理前询问 Handler 是否接收当前级别。本文用可运行示例说明昂贵参数计算、slog.Attr 构造和 LogAttrs 的边界,避免关闭日志时仍付出无效成本。231 收藏 -
os.DirFS 适合把目录暴露成 fs.FS,但它不是完整的安全沙箱。本文用相对路径和符号链接案例拆开根目录边界,比较 os.DirFS 与 os.OpenRoot 的使用场景,并给出检查清单。230 收藏 -
用 Go 的 weak.Pointer 做一个不会长期抓住对象的弱缓存,解释 runtime.KeepAlive、Load 与 GC 回收之间的边界,并给出可复现的并发读取写法。229 收藏 -
当文件名来自用户输入时,filepath.Join 只能处理字符串拼接,挡不住指向根目录外的符号链接。Go 1.24 提供的 os.OpenRoot 与 Root.Open 会在根目录范围内解析路径,本文用一个下载文件读取场景说明它能挡住什么、不能替代哪些权限控制。229 收藏 -
regexp.Regexp.LiteralPrefix 能返回正则表达式匹配必然拥有的字面前缀,但它不是完整的匹配判断。本文用请求路径筛选示例拆开 prefix、complete 与 MatchString 的边界,并给出可验证的安全用法。229 收藏 -
Go 的 log/slog 可以把日志级别过滤交给 HandlerOptions,但固定 Level 与可动态调整的 LevelVar 适用场景不同。本文用 JSONHandler、测试缓冲区和最小示例说明过滤发生在哪里,以及如何验证 DEBUG 是否真的被挡住。228 收藏 -
排查 Go context.WithDeadline 提前结束的问题,理解父级截止时间只会更早不会更晚的继承规则,并用剩余预算、HTTP 超时和测试日志完成可复现核对。228 收藏 -
Golang · Go教程 | 1天前 | golang · sync.Cond · 并发编程 · 任务队列 · 生产者消费者 · Go wait sync.Cond Broadcast 并发任务队列 有界队列
sync.Cond 适合把“队列未满”和“队列非空”这两个条件变成可等待、可唤醒的并发协议。本文用 Go 实现一个固定容量任务队列,说明 Wait 为什么必须放在条件循环中,以及满队列、空队列和关闭状态如何安全退出。228 收藏 -
strings.Builder.String 返回后继续写,旧字符串通常不会被业务代码直接改写,但 Builder 可能复用底层缓冲区并触发扩容。本文用源码和小实验拆开共享存储、扩容与 Reset 的边界。228 收藏 -
Go 泛型调用报错时,问题常常不在类型参数本身,而在约束的类型集、方法集与调用点能否同时建立推导方程。本文用三个最小例子拆开接口约束、显式实例化和返回值推导的边界。228 收藏 -
围绕 Go net/http Cookie.Partitioned 说明 CHIPS 的设置方式、Secure 与 SameSite=None 的组合要求,以及浏览器兼容和降级核验边界。227 收藏 -
os.ReadFile 读配置失败时,问题通常不在读取动作本身,而在工作目录、路径拼接和错误分类。本文用一段可运行的 Go 示例拆开定位顺序,并给出能保留原始原因的错误返回方式。225 收藏 -
通过文件读取和服务层包装错误的例子,拆解 Go errors.As 的目标类型匹配、%w 包装链、指针与接口边界,并给出可运行的检查方式。224 收藏 -
解释 Go 接口值为什么看起来有指针却不等于 nil,并用动态类型、返回错误和类型断言示例定位这类问题。224 收藏