Go语言技术文章
-
Go 的 text/template 报 function not defined 时,优先检查 FuncMap 是否在 Parse 前注册。本文用最小示例说明正确注册链、集中构造方式,以及解析后替换函数的边界。427 收藏 -
Go HTTP 客户端重试 POST 时,超时只说明客户端没有拿到结果,并不能证明服务端没有处理。本文从请求体、方法语义、幂等键和响应体关闭四个方面,给出一套可控的重试写法。427 收藏 -
Go runtime.KeepAlive 的关键不是延长所有对象的生命周期,而是在系统调用返回前保持带有 finalizer 的外部资源对象可达。本文用文件描述符和底层调用示例说明放置位置、适用边界与排查清单。427 收藏 -
Go TLS 客户端连接自签名服务失败时,通常不是把校验关闭,而是正确构造 RootCAs。本文说明如何保留系统根池、追加自签名 CA,并区分信任链与主机名错误。427 收藏 -
Go append 是否共享数组取决于追加后长度与原容量。通过固定容量示例定位覆盖位置,区分限制容量与复制元素存储,并明确切片接口的共享和修改约定。427 收藏 -
Go channel 缓冲区只能吸收暂时的速率差,不能提升消费者吞吐量。本文从到达速率、消费速率、发送阻塞和队列积压出发,说明如何选择一个小而有界的容量,并给出观察代码与决策表。427 收藏 -
Go 中声明但没有 make 的 channel 值是 nil,发送、接收和 range 都不会找到通信对象,因此会永久阻塞。本文对比 nil channel、空缓冲 channel 和已关闭 channel,给出初始化、nil 防护以及 context 超时的实用写法。427 收藏 -
Go json.Decoder.Token 会按顺序读取 JSON 流中的分隔符、键和值,并在自然结束时返回 io.EOF。本文说明返回类型、嵌套层级、Token 与 Decode 的配合方式,以及截断输入和非法结构的处理边界。427 收藏 -
Go regexp.Regexp.String 返回编译时使用的正则表达式文本,适合做配置回显和诊断日志。本文对比 String、MatchString、FindString 与 MarshalText 的职责,并说明空指针、动态规则和敏感日志的使用边界。427 收藏 -
Go TLS 客户端应把域名写入 DNS SAN、IP 写入 IP SAN,并让 tls.Config.ServerName 与真实身份对齐。本文说明 CommonName 的兼容边界、SNI 与主机名校验的关系,以及如何避免用 InsecureSkipVerify 绕过问题。427 收藏 -
filepath.WalkDir 不提供接管内部目录读取缓冲的参数,但可以复用调用方已有的 []string 容量保存重复扫描结果。本文给出可重用写法,并说明回调直处理、错误返回和切片生命周期边界。427 收藏 -
Go maps.Keys 返回无序键迭代器,结合 slices.Sorted 生成独立有序切片,再按键读取值。示例说明空映射、后续修改和业务比较规则。427 收藏 -
LookupNetIP 可以在查询阶段用 ip4 或 ip6 限定地址族,也可以先查 ip 再用 netip.Addr.Is4 或 Is6 二次筛选。本文用一个双栈连接场景说明两种写法的边界。427 收藏 -
Go 测试失败时,断言辅助函数可能让文件和行号落在 helper 内部。本文解释 t.Helper 如何标记测试辅助函数、让 testing 报告跳过辅助层,并说明多层 helper 与并发调用的使用边界。427 收藏 -
以一个订单接口为例,拆开 Go 1.27 encoding/json/v2 的迁移步骤,核对字段标签、旧 JSON 兼容性、测试策略与可回滚边界。426 收藏