Go语言技术文章
-
Go time.Ticker 在接收方处理较慢时会调整节奏或丢弃 tick。本文区分可跳过的状态刷新、必须补偿的周期任务和不能依赖 ticker 的可靠事件,给出带中文注释的 Go 实现与选择表。361 收藏 -
strconv.ParseUint 不接受前导加号或负号。通过批量大小命令行示例,区分符号策略、固定十进制、位宽范围与业务区间,并说明语法错误、范围错误和旧协议加号兼容的处理方式。314 收藏 -
Go 的 Location 会影响时间的构造解释和展示,但不等于改变实际时间点。本文说明 Equal、Before、After 与 == 的区别,并处理 ParseInLocation、UTC、序列化和单调时钟的常见边界。451 收藏 -
Go WebSocket 断开后没有马上出现错误,常见原因是程序没有持续读取连接。本文用 Gorilla WebSocket 说明 CloseError、读循环、关闭处理器和读超时的边界。338 收藏 -
Go 请求变慢时,先把主机名解析和拿到 IP 后的连接分别计时,再用 net.Resolver 的 PreferGo 与 Dial 判断解析器路径,避免把 DNS 问题误判成 TCP 或业务代码问题。500 收藏 -
Go Transport 配置看似未生效,需区分旧实例归属、连接复用和配置作用阶段。结合客户端工厂与顺序切换示例,说明不可变配置、响应体排空、闲置连接回收及热更新的失败边界。269 收藏 -
从 Go TLS 握手错误、ServerName、RootCAs 和 MinVersion/MaxVersion 入手,区分证书校验失败与协议版本协商失败,并给出不关闭证书验证的修正方式。128 收藏 -
Go HTTP 连接池出现空闲连接通常是 keep-alive 复用的正常结果。本文从 Response.Body、Transport 复用和三个空闲连接参数入手,给出排查与收紧连接池边界的方法。285 收藏 -
Go 流式响应中 ResponseController.Flush 返回错误时,先用 errors.Is 区分 ErrNotSupported 与底层刷新失败,再检查 ResponseWriter 包装层、写入时机和代理缓冲,避免把客户端延迟误判成服务端能力不支持。226 收藏 -
tls.ConnectionState.VerifiedChains 为空不一定代表 TLS 握手失败,它取决于客户端 InsecureSkipVerify、服务端 ClientAuth 和是否使用默认证书校验。本文说明如何区分 PeerCertificates、VerifiedChains 与 VerifyConnection,避免误判证书状态。173 收藏 -
Go 闭包捕获循环变量是否出错,取决于模块版本和变量声明方式。本文用最小示例解释 Go 1.22 的按迭代语义、Go 1.21 的 loopvar 预览方式,并给出兼容旧版本的修正写法。448 收藏 -
Go 方法值 x.M 创建时会保存已经求值的接收者。本文用值接收者和指针接收者对照说明旧快照、旧指针与变量重新赋值的区别,并给出方法表达式和显式闭包的修正选择。197 收藏 -
Go 类型别名保留原类型身份,定义类型则引入新的身份。结合编号类型示例说明直接赋值、显式转换、方法集和业务校验的区别,并分析接口迁移与领域隔离的取舍。437 收藏 -
Go 泛型里的类型参数不是运行时接口值,直接写 v.(string) 会失败。本文用最小复现解释类型约束、动态类型和 any(v).(T) 的区别,并给出安全的类型分支写法。191 收藏 -
Go 1.22 起可以直接用 http.FileServerFS 接收 fs.FS。本文用 embed.FS 和 fs.Sub 说明嵌入目录、URL 路径、io.Seeker 要求、404 与 index.html 重定向之间的关系。298 收藏