Go问答技术文章
-
Go 配置 CipherSuites 后连接失败,需先区分协议版本与套件范围。本文解释 TLS 1.3 配置限制、TLS 1.2 兼容条件及握手观测方式,并提供保留证书验证的诊断代码。130 收藏 -
Go TLS 客户端连接自签名服务失败时,通常不是把校验关闭,而是正确构造 RootCAs。本文说明如何保留系统根池、追加自签名 CA,并区分信任链与主机名错误。427 收藏 -
Go TLS 校验失败而浏览器正常时,重点核对拨号地址、ServerName、SNI 与证书 SAN 的关系,并区分主机名不匹配和信任链错误。256 收藏 -
Go HTTP 客户端可以在复用的 http.Transport 上设置 MaxResponseHeaderBytes,限制服务端响应头的最大字节数。本文说明如何用 Clone 保留默认行为、如何处理超限错误,以及为什么响应头和响应体需要分别设置边界。270 收藏 -
Go HTTP 客户端拿到响应头后,resp.Body 仍由调用方负责读取和关闭。本文按只看状态码、读取正文、循环请求三种场景说明 Body 未关闭为何会降低 HTTP/1 连接复用,以及如何用最小改动修复。473 收藏 -
Go POST 的 GetBody 为空,常与请求构造时的 Reader 类型有关。本文展示内存快照与显式正文工厂,说明 Clone、ContentLength 和关闭责任,并区分正文可重放与业务允许重试的前提。458 收藏 -
Go HTTP 长连接空闲后复用失败,通常不是单一的超时参数问题。本文比较客户端 Transport、服务端 keep-alive、Response.Body 和连接池复用这几个边界,给出配置与排查方法。424 收藏 -
Go HTTP 客户端的 goroutine 并发不等于连接会无限并行。本文围绕 Transport 的 MaxConnsPerHost、MaxIdleConnsPerHost 和请求排队关系,给出复用 Client、设置连接预算以及保留超时和响应体关闭的处理方式。415 收藏 -
Go HTTP/2 请求遇到 stream reset 时,先根据 Response 是否存在判断响应头是否到达,再把 StatusCode 与 Body.Read 错误分开记录,最后结合幂等性决定重试。221 收藏 -
Go CookieJar 跨子域会话异常应区分拒收与目标筛选,结合表驱动测试检查 Domain、Path 和 Secure,并明确 SameSite 的浏览器边界。314 收藏 -
Go 解包符号链接越界不能只靠路径字符串检查。本文说明链接拒绝策略、私有输出目录与 os.Root 写入边界,并提供仅接受目录和普通文件的 tar 示例。363 收藏 -
Go TLS 证书不匹配时,先确认客户端是否通过 ServerName 发送了 SNI,再查看服务端按 ClientHelloInfo.ServerName 选择了哪条证书链,最后区分 SAN、信任链和中间证书问题。本文给出一套只围绕握手日志与证书选择的定位方法。387 收藏 -
Go 标准库没有统一的跨平台文件锁 API。本文比较 Unix flock 与 Windows LockFileEx 的竞争、清理语义,再给出原子占位、数据库和 Redis 等替代策略。354 收藏 -
Go exec.Cmd 同时读取 stdout 和 stderr 时,单路读取或提前 Wait 容易造成阻塞。本文解释 StdoutPipe、StderrPipe 与 Wait 的边界,并给出简单收集和并发分流两种处理方式。305 收藏 -
Go 服务收不到 SIGTERM 时,先核对目标 PID,再比较容器入口是否把信号留在 shell,最后用 NotifyContext 把信号接入服务生命周期。本文只围绕 PID、容器入口和 Go 接收代码给出排查与选择方案。409 收藏