Go问答技术文章
-
Go HTTP 服务可以通过 Server.ConnContext 为新连接创建带元数据的上下文,后续请求从 r.Context() 继承读取。本文用连接追踪标识演示配置方式,并比较 BaseContext、ConnContext 与请求级 WithContext 的边界,说明 HTTP/2 并发和资源清理时的注意事项。313 收藏 -
用 Go 标准库 httptrace.ClientTrace.GotConn 观察 HTTP 客户端请求拿到的连接,解释 Reused、WasIdle 与 IdleTime 的区别,并给出安全记录日志的最小写法和边界。311 收藏 -
Go tview 动态新增输入组件后,组件虽然显示却可能仍由旧输入框接收键盘事件。本文解释 Flex.AddItem、focus 参数与 Application.SetFocus 的职责边界,并给出主事件回调、后台更新、Pages 和 Form 场景的处理方式。304 收藏 -
unsafe.Slice 的 len 参数决定返回切片的长度和容量,计算时若混用元素数与字节数,或发生整数溢出,就可能把访问范围带出原始对象。本文按指针来源、Sizeof 换算、nil 特例和边界测试逐步定位并修正。298 收藏 -
Go net/http 中,ReadHeaderTimeout 只限制请求头,读取请求体要用 ReadTimeout 或按请求设置 ResponseController.SetReadDeadline。本文给出慢上传、超大请求、客户端断开和 HTTP/1.1 连接关闭的处理方式。290 收藏 -
Bubble Tea 的 Update 修改字段后,下一轮 View 仍然不变,通常是返回了旧模型,或值接收者修改副本后没有返回该副本。本文按消息、模型、返回值和 View 的状态链路给出排查与修复写法。290 收藏 -
Go text/template 遇到嵌套 define 同名覆盖时,按关联模板、Parse 顺序、文件基名和 ExecuteTemplate 入口逐项定位,避免执行到错误定义。281 收藏 -
sync.Pool 取出的对象带着上一次请求的字段时,问题通常不是 Pool 失效,而是复用对象没有在交接边界清理。本文从临时对象契约、Reset 设计、Get/Put 时机和不适合放入 Pool 的状态四个方面,整理一套可落地的排查方式。278 收藏 -
context.WithValue 出现字段覆盖时,通常不是值被修改,而是相同键在父子 Context 中发生遮蔽。本文用包内私有键类型和类型安全访问器规避跨包冲突。277 收藏 -
html/template 并不是简单地把所有字符串统一转义,而是根据插值所在的 HTML、属性、URL、JavaScript 或 CSS 上下文选择处理方式。本文用最小示例排查转义异常、ZgotmplZ 和安全类型误用。274 收藏 -
用 sort.Search 的单调谓词找到升序切片中第一个大于等于目标值的位置,正确处理重复值、未命中和末尾插入。274 收藏 -
Go fuzz 失败语料只有在环境可重建时才真正可复现。本文把 time.Now 与包级随机函数改成可注入时钟和局部随机源,并将时刻偏移、随机种子纳入语料。273 收藏 -
Go afero 的 MemMapFs 和 OsFs 都实现 afero.Fs,但测试边界完全不同:前者把文件放在进程内存中,适合快速隔离的单元测试;后者调用真实操作系统文件 API,适合补充权限、路径和平台语义验证。本文按排查清单给出选择方法。272 收藏 -
Go 客户端配置 TLS 会话缓存后仍可能频繁完整握手。本文区分 HTTP 长连接复用与 TLS 会话恢复,说明 ClientSessionCache、ServerName、进程、LRU 容量和多节点票据密钥的边界,并给出 DidResume 排查写法。270 收藏 -
解释 Go 旧结构体中 64 位原子字段的对齐和复制边界,给出 atomic.Uint64 迁移、外部布局拆分、32 位构建与 go vet 复查方案。268 收藏