Go语言技术文章
-
读多写少不等于一定该用 sync.RWMutex。本文从读临界区、写者等待、锁升级限制和实际基准四个角度,说明如何在 Mutex 与 RWMutex 之间做出可验证的选择。131 收藏 -
maps.Clone 会创建新的 map 容器,但键和值只按普通赋值复制;值中若含切片、指针或 map,副本仍可能共享底层数据。本文用配置快照案例讲清判断方法、定制复制与测试门禁。131 收藏 -
围绕 Go net/url 的 URL.OmitHost 字段,说明空 authority 的 String 序列化、Path 双斜杠保护、Opaque URL 区别和调用方兼容策略,给出带中文注释的最小示例。131 收藏 -
以go-billy v5.6.2的memfs为例,解释Chroot后绝对路径与子根的关系,通过同一文件的内容比较区分父视图、子视图与宿主路径,并提醒不要重复拼接Root。131 收藏 -
Go GopherLua 注册 Go 函数的关键是实现 lua.LGFunction,再用 L.NewFunction 包装并通过 SetGlobal 或 SetFuncs 暴露给 Lua。本文围绕参数读取、返回值数量、错误回传和 LState 生命周期给出最小可复用写法。131 收藏 -
用 Go net/url 解析 URL 查询串,掌握 Query、Values.Get、Has、ParseQuery 在单值、多值、空值和错误处理上的边界。131 收藏 -
Go 的 filepath.Clean 可以按当前操作系统规则清理重复分隔符,但它同时会处理 .、..、空路径和分隔符风格。本文用边界示例说明清理结果、适用位置和性能测量口径。131 收藏 -
读取日志头、文件摘要或上传内容前 N 个字节时,io.LimitReader、io.CopyN 和手动缓冲的行为并不一样。本文按目标是限制读取、严格读取还是复用缓冲,给出选择边界、EOF 判断和可验证示例。130 收藏 -
crypto/tls.HandshakeContext 用于在 TLS 握手阶段接收 context 取消信号,但取消发生在握手前、握手中和握手后,连接状态并不相同。本文用一个最小客户端拆开超时、错误判断和关闭连接的边界。130 收藏 -
Golang · Go问答 | 1个月前 | 标准库 · net/http · Go问答 · ServeMux · Go 路径参数 http.ServeMux Request.PathValue 路由通配符
Go 1.22 引入的 http.ServeMux 路径通配符可以通过 Request.PathValue 读取,但空字符串既可能表示参数缺失,也可能是合法值。本文用订单路由示例拆开判断边界,并给出可兼容旧版本的处理方式。130 收藏 -
Go 服务变慢不一定先看 CPU。本文用 block profile 与 mutex profile 的记录语义、采样开关和 pprof 视图,说明如何区分等待方与持锁方,最后把画像结果落到具体同步点。130 收藏 -
Go append 后原切片看起来也变了,根因通常是多个切片共享底层数组且容量仍有余量。本文用 len、cap、三下标切片和 copy 说明复用边界,并给出追加隔离与完全复制的选择方法。130 收藏 -
Go encoding/xml 遇到属性和子元素同名时,不要复用一个字段。用不同 Go 字段分别标记 xml:"code,attr" 和 xml:"code",即可让 Unmarshal 与 Marshal 清晰区分两种 XML 来源。130 收藏 -
Go 1.19 及以上项目通常优先使用 atomic.Int64;兼容旧版本或已有 *int64 接口时继续使用旧式原子函数。本文从 API 形状、计数器迁移、版本、对齐和复制约束说明如何选择。130 收藏 -
Go TestMain 没有 error 返回值,初始化失败时应先清理已创建资源,再用 os.Exit(1) 明确阻断测试;初始化成功则保存 m.Run 的退出码,清理后原样返回。130 收藏