Go语言技术文章
-
strconv.ParseUint 不接受前导加号或负号。通过批量大小命令行示例,区分符号策略、固定十进制、位宽范围与业务区间,并说明语法错误、范围错误和旧协议加号兼容的处理方式。314 收藏 -
Go 1.27 的 go fix unsafefuncs 可以把可识别的 unsafe 指针算术迁移为 unsafe.Add 函数调用。本文说明怎样先用 -diff 预览,再检查字节偏移、对象边界、生命周期和旧工具链兼容性。314 收藏 -
Go encoding/json/v2 默认不给 time.Duration 分配 JSON 表示,直接编码会得到 SemanticError。本文用 FormatDurationAsNano(true) 让它以纳秒数 JSON number 编解码,并梳理嵌套字段、字符串数字与 v1 兼容边界。314 收藏 -
Go 用较短内容覆盖旧文件时不会自动删除尾部字节,使用 os.File.Truncate 按新长度截断,并注意文件偏移、写权限和并发边界。314 收藏 -
Go 服务端可以直接调用 r.Referer() 读取请求头中的 Referer;缺失时返回空字符串。本文说明它与 Header.Get 的关系、测试写法、代理和隐私策略造成的缺失边界,以及为什么不能把 Referer 当成认证或安全授权依据。314 收藏 -
Go ast.File.Pos 指向 package 声明而非文件头。通过原始源码示例区分 FileStart、Doc 与字节偏移,并说明源码工具如何保留前导注释与空白。314 收藏 -
用 Go archive/zip.Reader 逐项读取 ZIP 条目时,把条目内容交给 io.Reader 处理,并把 io.CopyBuffer 的工作缓冲区放到循环外复用,减少批处理中的重复临时分配,同时保留 Close、校验和、ZIP64 尺寸与不安全路径边界。314 收藏 -
使用 go/types 分析表达式时,Info.Types 会把常量表达式记录成 TypeAndValue。本文从最小类型检查流程开始,说明怎样读取 go/constant.Value,区分常量与非常量,并避免用 float64 或普通字符串破坏精度。314 收藏 -
用 Go Excelize 为工单状态列添加下拉数据校验,拆分目标区域与候选来源,给出错误处理完整示例,并说明内嵌列表、单元格引用和输入提示的适用边界。313 收藏 -
Golang · Go问答 | 4星期前 | 并发 · 单元测试 · go · database/sql Go sqlmock MatchExpectationsInOrder 并发查询测试 预期顺序
Go sqlmock 默认按预期注册顺序匹配,多个 goroutine 并发查询时,实际到达顺序可能不同,测试就会误报。本文说明如何用 MatchExpectationsInOrder(false) 解除不必要的顺序约束,同时保留 SQL 和参数匹配,并区分事务等必须有序的场景。313 收藏 -
本文说明如何用 testing.T.Setenv 临时修改测试环境变量、自动恢复原值,并解释它为什么不能与 t.Parallel 或并行祖先同时使用。313 收藏 -
Go 上下文取消后下游请求仍不退出,通常不是 cancel 失效,而是取消信号没有传到具体 API,或底层阻塞点本身不支持取消。本文按 HTTP、数据库和自定义调用链给出排查与修复方法。313 收藏 -
Go 模板提示自定义函数未定义时,应在同一模板集合解析前注册 FuncMap。通过统一构造器、命名模板与独立缓冲输出,区分注册、解析和执行错误,避免在并发请求中修改共享模板。313 收藏 -
Go httptrace.GotConnInfo 的 Reused、WasIdle 和 IdleTime 分别回答不同问题。本文用 ClientTrace 观察 HTTP 客户端连接复用,说明响应体关闭、Transport 配置、重定向和 HTTP/2 场景下的判断边界。313 收藏 -
Go database/sql 的 sql.NullTime 扫描 NULL 后应让 Valid=false。本文拆开 NULL、有效时间、扫描错误和对象复用四种状态,给出 QueryRow、Rows.Scan 与 Value 的正确处理方式。313 收藏