Go语言技术文章
-
Go embedding 的字段冲突要先看选择器路径:同层同名会产生歧义,外层同名会隐藏嵌入字段,而方法提升还要单独检查签名与显式调用路径。本文用最小示例说明如何定位并修复。438 收藏 -
Go 子切片 append 后原切片内容被改写,通常是因为子切片仍有足够 cap,append 复用了同一个底层数组。本文用 len、cap、三索引切片和复制方案说明如何判断与隔离。438 收藏 -
说明 Go 服务启动时如何为 database/sql 的 PingContext 设置独立超时,区分超时、取消和驱动错误,并选择失败退出或降级策略。438 收藏 -
Golang · Go教程 | 2个月前 | WEB开发 · 标准库 · HTTP · go · 路由迁移 Go ServeMux HTTP路由冲突 method pattern host pattern
把旧版 Go HTTP 路由迁移到支持方法和主机模式的 ServeMux 时,最容易误判的是注册顺序。本文用冲突示例解释方法、路径、主机三种匹配关系,给出启动期检查、兼容写法和 httptest 回归边界,避免服务上线后才发现请求落到了错误处理器。437 收藏 -
Go 1.24 引入 os.Root 后,处理用户可控文件名不必再手写一套容易漏掉符号链接和 .. 的路径校验。本文用一个安全文件读取小实验,验证 OpenRoot、Root.Open、OpenInRoot 的边界,并说明旧版本的兼容做法。437 收藏 -
Go 的 time.After 适合一次性等待,但放进高频循环后会不断创建新的计时器,让任务堆积到更难观察的状态。本文从轮询任务出发,解释 time.After 的生命周期,给出可停止的 time.NewTimer 写法,并用计数和取消测试验收修复是否生效。437 收藏 -
Go 数据库请求超时后仍占连接,通常不是把 timeout 调大就能解决。应从 HTTP 请求 Context 派生查询 Context,调用 QueryContext,关闭 Rows,并结合 DBStats 与数据库日志确认取消信号真的到达驱动和数据库。437 收藏 -
filepath.Clean 只做路径字符串的词法规范化,不能判断用户是否有权访问某个目录。本文用 Go 示例拆开 Clean、Rel、IsAbs 与符号链接检查的边界。437 收藏 -
Go 正则解析日志时,不要把 FindStringSubmatch 的数字下标散落在结构体初始化里。使用命名捕获组配合 SubexpIndex 建立字段映射,匹配失败返回错误,可选字段缺失保留零值,正则调整后更容易维护。436 收藏 -
Go 关闭带缓冲 channel 后,已经写入缓冲区的元素仍会按顺序读完。本文用代码说明 close、ok、range 与零值判断的边界。436 收藏 -
Go 测试中的 testexit 不是常规公开参数。本文比较 os.Exit、runtime.Goexit、t.FailNow、t.SkipNow、TestMain 和 -timeout 的退出范围,帮助你把失败、跳过、进程退出与资源清理分开处理。436 收藏 -
围绕 Go time.Ticker 的停止语义,演示如何用 context 退出周期循环、等待工作协程,并按所有权释放外部资源,同时说明 Go 1.23 垃圾回收变化的边界。436 收藏 -
Go 1.21 及以上的新代码通常优先用 slices.SortStableFunc;旧版本兼容或强依赖索引比较器时可保留 sort.SliceStable。本文对照两种比较器契约、迁移风险与稳定性断言。436 收藏 -
Go 程序用 os.CreateTemp 创建临时文件后,删除失败往往不是路径问题,而是文件句柄仍被占用。本文用一个可复现的导入场景拆开 CreateTemp、Close、Remove 的顺序,并说明 Windows 与 Unix 文件系统的行为差异、错误定位和安全清理写法。435 收藏 -
Go 1.26 新增 crypto/hpke,提供符合 RFC 9180 的混合公钥加密接口。本文用一个最小消息交换示例拆开封装、解封装、上下文信息和密钥用途边界,并说明如何验证密文不可直接当作明文使用。435 收藏