Go语言技术文章
-
项目同时维护 mock、stringer 和资源生成指令时,go generate -run 可以按指令完整原文的正则匹配只执行目标任务。本文从一次误触发现场讲清匹配范围、精确写法、预览排查和防复发约定。453 收藏 -
Golang · Go问答 | 1个月前 | 错误处理 · Go问答 · 流式解码 io.Reader CorruptInputError io.ErrUnexpectedEOF Go base64 base64.NewDecoder
base64.NewDecoder 是流式读取器,遇到截断输入时可能先返回已经完整解出的字节,再在后续读取中报告 io.ErrUnexpectedEOF。本文拆解 4 字符分组、n 与 err 的关系,以及如何避免把部分数据误当成完整结果。453 收藏 -
fmt.Errorf 中的 %w 会保留底层错误并建立可遍历的错误链,%v 只把错误格式化为消息文本。本文用最小示例说明 errors.Is 找不到原始错误的原因、排查方法和自定义包装边界。453 收藏 -
Go TLS 握手卡住时,不要只给 TCP 建连设置超时。通过 DialContext 约束建连、HandshakeContext 约束 TLS 握手,并在失败路径关闭连接,可以让取消信号真正覆盖卡住的握手阶段。453 收藏 -
Go 1.21 起可以用 maps.Copy 将默认配置与覆盖配置合并到目标 map:src 的同名键覆盖 dst,目标映射会被原地修改。本文说明调用方向、nil 目标、浅拷贝和旧版本兼容写法。453 收藏 -
Go 的 sync.RWMutex 不支持把 RLock 直接升级为 Lock。读锁持有者在写者等待时继续申请写锁,会形成自己等待自己释放读锁的阻塞环。本文解释规则、定位证据和安全改写方式。453 收藏 -
外部毫秒参数不要直接乘 time.Millisecond。本文用 Go 标准库写一个带格式、符号和上限检查的转换函数,处理精度、溢出与边界值。453 收藏 -
通过依赖注入让 Go 令牌生成函数接收 io.Reader:生产环境使用 crypto/rand.Reader,测试环境注入可重复字节流,稳定覆盖长度、编码和错误分支,同时明确测试替换不能进入生产路径。453 收藏 -
Go 用 slices.IndexFunc 按条件查找切片时,会返回第一个满足判断的元素索引;如果没有匹配项则返回 -1。本文说明空切片、重复匹配、结构体字段判断、Index 对比和旧工具链降级写法。453 收藏 -
Go TLS 报证书主机名不匹配时,先不要关闭证书校验。本文按连接地址、SNI、SAN、IP 地址、通配符和代理入口逐项核对,并用 VerifyHostname 给出可复用的最小复核代码。453 收藏 -
说明 Go slices.BinarySearch 的升序输入前提、插入位置与命中标志,提供复制输入并构建整数索引的完整示例,解释空切片、重复值和末尾位置的边界,避免迁移旧查找代码时越界。453 收藏 -
Go os.CopyFS 可以直接把 embed.FS 这样的嵌入文件系统复制到磁盘。本文从批处理场景说明如何减少手写遍历、整文件读取和重复临时对象,并处理已存在文件、权限错误与复制边界。453 收藏 -
Go 经过 HTTP 代理访问 HTTPS 时,代理需要的字段必须放在 CONNECT 握手请求中。本文区分 ProxyConnectHeader、GetProxyConnectHeader 与目标请求 Header,说明静态配置、动态回调、代理认证和错误边界。453 收藏 -
Go HTTP/1 客户端可通过 httptrace.GotConn 的 Reused、WasIdle 和 PutIdleConn 观察连接复用。示例说明共享 Transport、响应体消费与关闭,以及连接池和协议排查边界。453 收藏 -
Go 的 ServeMux 已经能按方法、主机和路径匹配请求,Request.Pattern 可以把最终命中的模式带进日志。本文用一个最小路由示例比较精确路径、通配符和方法匹配,并说明空 Pattern 的边界。452 收藏