Go语言技术文章
-
Go 服务调整 TLS 最低版本后旧客户端握手失败,通常不是证书单一问题,而是双方允许的协议版本没有交集。本文用 tls.Config、MinVersion、MaxVersion 和连接状态说明如何定位,并给出隔离旧客户端入口的兼容策略。440 收藏 -
Go 客户端自定义 TLS 拨号或按 IP 连接时,ServerName 缺失会破坏主机名校验与 SNI 证书选择。本文区分拨号地址、证书身份和根证书信任,给出 http.Transport 与 tls.Client 的安全修复写法。440 收藏 -
Go SetFinalizer 的触发时机由垃圾回收决定,不适合承担文件描述符、连接等非内存资源的确定性关闭。本文用 Close、defer、sync.Once 和 runtime.AddCleanup 组合出显式主路径加兜底清理的方案,并说明边界。439 收藏 -
Go 的 errors.Is 会沿错误包装树匹配哨兵值。本文用 %w 上下文包装、错误分类和 API 契约示例,说明为什么 ==、%v 拼接和重复 errors.New 会失效。439 收藏 -
Go embedding 的字段冲突要先看选择器路径:同层同名会产生歧义,外层同名会隐藏嵌入字段,而方法提升还要单独检查签名与显式调用路径。本文用最小示例说明如何定位并修复。438 收藏 -
Go 子切片 append 后原切片内容被改写,通常是因为子切片仍有足够 cap,append 复用了同一个底层数组。本文用 len、cap、三索引切片和复制方案说明如何判断与隔离。438 收藏 -
说明 Go 服务启动时如何为 database/sql 的 PingContext 设置独立超时,区分超时、取消和驱动错误,并选择失败退出或降级策略。438 收藏 -
Go 测试中的 testexit 不是常规公开参数。本文比较 os.Exit、runtime.Goexit、t.FailNow、t.SkipNow、TestMain 和 -timeout 的退出范围,帮助你把失败、跳过、进程退出与资源清理分开处理。436 收藏 -
围绕 Go time.Ticker 的停止语义,演示如何用 context 退出周期循环、等待工作协程,并按所有权释放外部资源,同时说明 Go 1.23 垃圾回收变化的边界。436 收藏 -
Go 1.21 及以上的新代码通常优先用 slices.SortStableFunc;旧版本兼容或强依赖索引比较器时可保留 sort.SliceStable。本文对照两种比较器契约、迁移风险与稳定性断言。436 收藏 -
解释 Go 表驱动并行测试为什么会读到同一个循环变量,给出 tc := tc 的兼容写法,并区分 Go 1.22 语义、浅复制和共享资源问题。435 收藏 -
Go 使用 bufio.Writer 写文件时,Flush 成功并不等于关闭顺序正确。本文用最小示例拆开 Write、Flush、Close 三个阶段,定位空文件、defer 逆序和错误被覆盖等常见问题。435 收藏 -
Go archive/zip 的 Writer.Create 遇到同名路径不会覆盖,而会追加重复条目。本文用路径规范化、seen map 和待写集合,分别实现拒绝重复与最后一份生效两种方案。435 收藏 -
Go url.URL 的 Opaque 用于表示 scheme:opaque 形式的非层级 URI。本文对比 mailto、urn、data 与普通 HTTP 地址,说明字段读取、直接构造和误用边界。435 收藏 -
区分 Go 字符串的字节偏移、rune 数量和用户感知字符,给出按 rune 边界与按字节预算安全截断的修复写法。435 收藏