Go语言技术文章
-
从父 Context 的 Deadline 读取剩余时间,先预留收尾余量,再用比例与最大值计算子任务超时。本文给出可复用的预算函数,并说明无截止时间、预算耗尽和并发子任务的处理边界。232 收藏 -
Go mutex profile 统计的是竞争锁时其他 goroutine 的近似累计等待时间,本文解释 Unlock 归因、采样率设置、导出查看和常见误判。232 收藏 -
Go 服务收到停机信号后仍有请求进入,通常是监听器尚未关闭或摘流量与停机之间存在窗口。本文用 draining、显式 Listener 和 Server.Shutdown 完整处理。232 收藏 -
slog.Handler 的 WithAttrs 不只是把字段拼到日志里:实现自定义 Handler 时,属性如何分组、何时复制、如何保证并发安全,都会影响分配次数和输出一致性。本文用一个可运行的 Handler 说明这几个边界。231 收藏 -
io.ReadAll 写起来很短,但它会把输入完整收集到一个字节切片中。本文从大响应和未知长度输入的现场出发,解释 len/cap 增长、峰值内存与分块读取的边界,给出可复查的 Go 代码。231 收藏 -
Go log/slog 的 Logger.Enabled 会在日志参数处理前询问 Handler 是否接收当前级别。本文用可运行示例说明昂贵参数计算、slog.Attr 构造和 LogAttrs 的边界,避免关闭日志时仍付出无效成本。231 收藏 -
Go archive/zip 读取 ZIP 清单时,可以先访问 Reader.File 和 FileHeader,只拿名称、大小、压缩方式等中央目录信息;确认需要正文后再调用 File.Open。231 收藏 -
Go encoding/xml 中 xmlattr 并不是独立的命名空间开关。本文说明 ,attr、namespace-URL local,attr 与 xml.Name.Space/Local 的关系,并给出 MarshalXMLAttr 和 UnmarshalXMLAttr 的边界用法。231 收藏 -
Go select 的 default 在没有就绪通信时会立即返回,放进永久循环容易造成忙等。本文给出删除 default 的阻塞写法、time.Ticker 退避方案,以及 channel 关闭、nil channel 和 context 取消的排查清单。231 收藏 -
os.DirFS 适合把目录暴露成 fs.FS,但它不是完整的安全沙箱。本文用相对路径和符号链接案例拆开根目录边界,比较 os.DirFS 与 os.OpenRoot 的使用场景,并给出检查清单。230 收藏 -
Golang · Go教程 | 3星期前 | go · https · Go crypto/tls按ServerName选择证书 tls.Config.GetCertificate ClientHelloInfo.ServerName Go SNI证书 Go多域名HTTPS
围绕 Go crypto/tls 的 ClientHelloInfo.ServerName,说明如何在 GetCertificate 中按 SNI 选择 tls.Certificate,处理未知域名、无 SNI 的默认回退,并区分 GetConfigForClient 的适用边界。230 收藏 -
Go 泛型切片算法不必一开始就抽象成复杂接口。本文从算法实际操作出发,讲清 []E 与 ~[]E 的选择、元素约束拆分、类型推断和命名切片边界。230 收藏 -
Go 将 JSON 解码到 map[string]any 时数字默认变成 float64。本文用 UseNumber、结构体和边界转换方案保留整数与高精度数字,避免 ID 和金额失真。230 收藏 -
Go 程序中,若在 main 函数结束前未等待 goroutine 完成,会导致其被强制终止,通道接收逻辑(如写文件)可能完全失效,尤其在仅发送单个值时表现明显。 Go 程序中,若在 main 函数结束前未等待 goroutine 完成,会导致其被强制终止,通道接收逻辑(如写文件)可能完全失效,尤其229 收藏 -
用 Go 的 weak.Pointer 做一个不会长期抓住对象的弱缓存,解释 runtime.KeepAlive、Load 与 GC 回收之间的边界,并给出可复现的并发读取写法。229 收藏