Go语言技术文章
-
flate.NewReaderDict 只初始化解压状态,不会在构造时读取并验证完整数据;字典不一致通常到 Read 或 io.Copy 展开回溯引用时才暴露,而且可能表现为 corrupt input,也可能静默产出错误字节。本文给出诊断与协议修复方法。320 收藏 -
Go database/sql 通过 Rows.ColumnTypes 读取查询结果的列名、数据库类型、长度、精度、可空性和建议扫描类型,并说明驱动不支持与 SQL NULL 的处理边界。319 收藏 -
Go text/template 的自定义函数要先放进 template.FuncMap,再通过 Funcs 绑定并 Parse 模板。本文说明注册时机、函数签名、管道调用、错误处理,以及解析后替换同名函数的边界。319 收藏 -
Go encoding/gob 解码到已有结构体时不会先清空目标,流中缺少的字段和发送端被省略的零值字段可能继续保留旧内容。本文用最小示例说明字段合并语义,并比较复用目标、解码到新变量和存在性字段三种处理方式。319 收藏 -
用 database/sql 的 ColumnTypes 处理动态查询列:字段白名单负责安全,参数绑定负责值,ColumnTypes 负责结果元数据与稳定组装。319 收藏 -
从 G、M、P 的阻塞表现出发,把 Go 长时间 CPU 计算拆成可恢复批次,用 context、有界 worker 池和 execution trace 控制延迟、取消与并行度。319 收藏 -
sync.Map 不是普通 map 的无脑替代品。本文用热点配置缓存这个场景,比较读多写少、频繁更新和带类型断言三种路径,结合 Go 基准测试与内存占用,说明什么时候值得采用、什么时候应该继续使用 map 加 RWMutex。318 收藏 -
Go 1.26 放宽了内置 new 的参数限制,new(表达式) 可以直接创建带初始值的指针。本文用 JSON 可选字段和泛型示例说明它解决了什么问题、旧代码是否需要迁移,以及升级后如何验证兼容性。318 收藏 -
Go 1.27 会识别已经移除的 GODEBUG 设置,但只接受移除前的最终默认值。文章比较 go.mod 与源码配置位置,并用 asynctimerchan 说明保留和报错边界。318 收藏 -
用 httptest.NewTLSServer 创建带测试证书的 HTTPS 服务,再使用 server.Client 发起请求,完成 Go 接口单元测试并避开本地证书校验误区。318 收藏 -
Go 的 regexp.Compile 失败时,先区分正则语法错误与匹配不到,再用 regexp/syntax.Error 读取错误类型和问题表达式,最后处理动态规则与 MustCompile 的边界。318 收藏 -
Go build 的 -ldflags 不是主动截断空字符串,问题通常来自 Shell 展开与 Go 参数列表拆分。本文说明 -X 的完整 assignment 写法、带空格值的引号边界,以及用 go build -n 排查参数丢失。318 收藏 -
Go 的 select default 只负责非阻塞选择,不负责等待取消。本文用 worker、ctx.Done、关闭 channel 和 ok 判断说明正确处理取消信号的方法。318 收藏 -
Go 的 nil map 读取会返回元素零值,但写入会触发 panic。本文用可复现的判断方式拆开读取、ok 值、len、make 和嵌套 map 的边界,给出稳定修复方案。318 收藏 -
支付、下单或重试场景里,Go HTTP API 需要区分同一请求的安全重放与参数冲突。本文从调用方体验出发,设计 Idempotency-Key 的语义、存储状态、过期策略和错误响应,并给出可运行的 Go 示例。317 收藏