Go问答技术文章
-
Go exec.Command 找不到程序时,先区分父进程 PATH、命令解析和子进程 Env。本文用 LookPath、Cmd.Path 与 os.Environ 逐层排查,并说明什么时候必须改成绝对路径。487 收藏 -
Go text/template 中变量输出为空,常见原因不是模板语法,而是 range、with 改变了点号上下文,或子模板没有显式收到数据。本文用最小示例拆开 dot、$、变量和字段访问的作用域边界,并给出可复用的排查清单。458 收藏 -
Go pprof heap profile 中样本条目偏少,并不等于程序只分配了这么少的对象。本文区分采样条目、加权读数、inuse 与 alloc 指标,并说明 MemProfileRate 应该怎样影响解读。172 收藏 -
Go fuzz 运行时间过长时,不要只盯着 -timeout。本文区分 -fuzztime、-fuzzminimizetime、-parallel、-timeout 和 Fuzz 目标内的输入大小限制,并给出本地、CI 与深度 fuzz 的组合方式。234 收藏 -
Go 的 nil map 可以读取、遍历和删除,但不能写入。本文用缓存索引示例说明 make 初始化、惰性初始化、双值读取和回归检查,避免 assignment to entry in nil map。103 收藏 -
Go channel 关闭并耗尽后,单值接收仍会返回元素类型的零值。本文用 int channel 说明合法零值与关闭状态的区别,并给出 value、ok 双值接收、range 和缓冲 channel 的边界处理方式。378 收藏 -
Go url.Parse 会把路径保存为解码后的 Path,原始的 %2F 等编码可能只保留在 RawPath 提示中。本文用 EscapedPath 说明如何稳定输出有效的原始路径编码,并处理提示失效的边界。465 收藏 -
Go json.Decoder 字段为空时,先看错误,再检查导出字段、JSON标签、大小写、嵌套层级、目标指针和输入流。区分缺失、null与空字符串,并说明严格模式的兼容取舍。166 收藏 -
Go json.Unmarshal 解码时间字段时报错,先区分时间格式不符合 RFC3339 还是 JSON 类型与结构体字段不匹配,再决定保留 time.Time、增加自定义 UnmarshalJSON,或使用中间结构完成外部格式适配。214 收藏 -
Go 中公开的 API 是 runtime/debug.SetMemoryLimit,它提供的是软内存限制,并不会把容器 RSS 变成硬上限。本文区分 Go 运行时统计、cgroup 硬限制和外部内存,说明进程仍超限时该如何排查与调整。105 收藏 -
Go 的 sync.RWMutex 不支持把 RLock 直接升级为 Lock。读锁持有者在写者等待时继续申请写锁,会形成自己等待自己释放读锁的阻塞环。本文解释规则、定位证据和安全改写方式。453 收藏 -
Go 中 WithDeadline 和 WithTimeout 得到的截止时间不一致,通常来自调用时刻不同或父 Context 更早过期。本文按故障现场、父子截止约束和剩余预算说明排查与修复边界。266 收藏 -
Go Rows.Next 返回 false 而 Err 为 nil,可能是正常结束或空结果。本文区分游标消费、提前关闭、扫描与遍历错误,提供单结果集读取函数,并解释 ErrNoRows 与多结果集边界。120 收藏 -
Golang · Go问答 | 2星期前 | TLS · 连接池 · 故障排查 · Go问答 · 证书轮换 DidResume session ticket ClientSessionCache Go TLS SetSessionTicketKeys
Go TLS 证书轮换后仍看到旧会话,通常不是证书文件没替换,而是旧连接、HTTP Transport 连接池或 session ticket 在复用。本文用 DidResume 区分恢复握手,给出服务端证书指针切换、票据密钥轮换、客户端 Transport 重建和长连接排空的迁移顺序。354 收藏 -
Go build 与 go vet 结果不同不一定是工具链异常。本文通过一个格式参数错误的小模块,区分编译、vet 和测试职责,给出修复代码及本地与 CI 的环境对齐方法。444 收藏