-
MakeFromLiteral用Unknown表示非法字面量的不可用结果,不返回普通error。本文给出业务适配函数,说明诊断上下文保存、接口误用和完整源码解析的区别。
-
说明 database/sql/driver.DriverContext、OpenConnector 与 Connector.Connect(ctx) 的职责分工,给出按 DSN 创建连接、传递取消上下文和兼容 Driver.Open 的最小实现思路。
-
os.Readlink 返回的是符号链接保存的目标文字。本文说明相对目标为什么要以链接所在目录为基准,如何处理绝对路径和错误边界,以及何时改用 filepath.EvalSymlinks。
-
Go math/rand/v2 的 ChaCha8 在同一份 [32]byte 种子和同一调用方式下可以复现原始 Uint64 序列;如果序列不同,优先排查种子字节、实例是否已被消费、Read 与 Uint64 是否交错,以及是否把 Rand 的派生方法误当成固定一步消费。
-
Go AddDate 按业务时区增加日历日,Add 增加固定时长。用完整示例比较钟表字段、UTC 偏移和实际间隔,解释跨夏令时的差异及不存在或重复时刻的边界。
-
database/sql 扫描 SQL NULL 时,普通 string、int 字段无法表达空值语义。本文从扫描失败现场入手,分别使用 sql.Null* 与 Go 1.22 的 sql.Null[T],再把数据库 DTO 转换为业务结构体,给出单行、批量查询和写回数据库的稳定做法。
-
pkg.go.dev API 的 latest 代表索引已识别的最新模块版本,不等于仓库默认分支或任意 Git 标签。本文从语义化标签、子模块前缀、主版本路径和索引传播四层排查差异,并给出最小验证命令。
-
Go net.Resolver 的自定义超时要分成两层:调用 LookupIPAddr 时用 context.WithTimeout 限制整次解析,Resolver.Dial 内部再用 net.Dialer.DialContext 约束连接 DNS 服务的时间。本文给出可复用代码,并说明 PreferGo、StrictErrors、UDP/TCP 与错误判断边界。
-
高频循环里反复调用time.After会让计时器无法主动取消。本文用可复用的time.NewTimer演示Stop、排空、Reset和退出清理,并说明Go 1.23前后的Timer语义差异。
-
fmt.Errorf 用 %w 包装自定义错误后,调用方可通过 errors.As 找回具体类型;本文解释值接收者、指针接收者、%v 与目标指针的对应关系。
-
Go 用 context.WithValue 传 trace id 时,key 不要直接用 string;用包内私有类型配合类型化存取函数,既能避免跨包碰撞,也能限制值只服务于请求链路。
-
Go 接口类型本身支持比较,但接口里的动态值如果是 slice、map、func,或包含这些字段的数组和结构体,比较相同动态类型的两个接口就可能触发 panic。本文说明判断边界,并给出 reflect.Value.Comparable、reflect.DeepEqual 和类型化比较的选择方法。
-
多模块 Go 仓库里,go test ./... 只覆盖当前模块并不一定是测试失效。本文从 go.work、use、replace 和模块边界入手,给出补齐工作区并逐模块测试的实用做法。
-
Go 用 httptest 写 Handler 单测时,常见现象是状态码为 0、响应头没生效,或读到的响应体为空。关键是区分 ResponseRecorder 的记录时机、WriteHeader 的提交边界,以及 Result 必须在 Handler 返回后再读取。文中给出可复用的最小测试和复查清单。
-
有没有办法在解析*http.request对象并将其转发到gorillamux路由器处理程序之前捕获该对象?例如,我们有一些路由映射及其处理程序:r:=mux.newrouter()r.handlefunc("/products/{key}",producthandler)r.handlefunc("/articles/{category}/",articlescategoryhandler)我计划使用动态语言前缀(2个符号)。示例:没有语言代码(默认语言选项):