Go语言技术文章
-
Go 1.22 起可以用 reflect.TypeFor[T]() 直接取得泛型参数的 reflect.Type。本文从 TypeOf 的旧写法切入,说明接口、指针、切片和结构体元数据的读取方式,并给出泛型元数据缓存与静态类型边界的实用写法。196 收藏 -
用一个清晰的 secret.Do 封装把密码处理函数放进机密边界,讲明输入所有权、结果复制、实验开关、panic 与平台限制。369 收藏 -
go list 看到的模块 Go 版本不等于当前真正执行编译的工具链版本。本文拆解 go.mod 的 go 与 toolchain、GOTOOLCHAIN 自动选择、工作区和 CI 环境差异,并给出一套可复制的排查命令。101 收藏 -
runtime/secret.Do 通过编译器与运行时协作,减少机密数据在寄存器、栈和堆上的残留,但它不把普通优化结果变成语言规范保证。本文梳理两者的职责边界、返回值设计和兼容限制。292 收藏 -
go generate 默认在包含指令的 Go 包源目录运行。本文从工作目录、相对路径、环境变量和模块根目录入手,排查命令找不到、输入为空与生成文件落错位置等问题。229 收藏 -
runtime/secret.Do 可以让 Go 在机密计算返回前清除相关寄存器与栈,并在堆对象变得不可达后交给垃圾回收器处理。本文用最小示例说明实验开关、平台限制、全局变量、panic 和 Goexit 等使用边界。337 收藏 -
调整 GOGC 或 runtime/debug.SetGCPercent 后,延迟不会按固定方向变化。本文用固定工作负载、隔离的基准样本和延迟分位数,对照分析 GC 频率、堆空间、吞吐与 p95/p99 的关系。416 收藏 -
Go 迁移到 ML-KEM 时,不要把后量子算法简单替换或直接拼接共享秘密。本文以 crypto/mlkem 和传统 ECDH 为例,说明协商、上下文绑定、HKDF 派生与失败即拒绝的组合方式。245 收藏 -
Go 容器内存限制不是把 SetMemoryLimit 当成硬上限,而是先给 cgroup 预留运行时和外部内存,再用 GOMEMLIMIT 或 SetMemoryLimit 约束 Go runtime 的软目标。本文按预算、配置、观测和回退步骤给出可复用做法。496 收藏 -
Go 的 crypto/mlkem.Decapsulate 只有在密文长度不正确时返回错误;长度正确但内容无效时会得到不匹配的共享密钥。本文给出错误传播、协议确认和日志脱敏的实用写法。122 收藏 -
Go 服务出现内存指标突增时,不能只看 Sys 或单次 HeapAlloc。本文用 runtime.MemStats 建立采样快照,结合堆保留、对象数量、GC 次数和分配速率区分短时峰值、缓存保留与持续增长。495 收藏 -
Go 的 crypto/mlkem 把 ML-KEM 密钥分成私有的 DecapsulationKey 和公开的 EncapsulationKey。本文说明 GenerateKey、Bytes、New*Key 的对应关系,并整理 768/1024 参数集的序列化长度与工程基线。484 收藏 -
Golang · Go问答 | 19小时前 | CGO · 垃圾回收 · Go问答 · Go运行时 runtime.AddCleanup runtime.SetFinalizer runtime.KeepAlive 显式Close 资源生命周期
runtime.SetFinalizer 的触发时机无法承担确定性资源释放。本文从显式 Close、runtime.AddCleanup 和 runtime.KeepAlive 三个边界出发,说明如何替代不及时的 finalizer,并处理父子资源、并发关闭和 cgo 指针规则。162 收藏 -
Golang · Go教程 | 20小时前 | 加密 · Go教程 · crypto/hpke Go HPKE associated data aad Sender.Seal Recipient.Open
Go 的 crypto/hpke 用 aad 把租户、版本和消息序号等公开字段绑定到密文认证范围。本文区分 info 与 aad,给出 Sender.Seal/Recipient.Open 的实现方式,并说明上下文计数器、消息顺序和重放处理的边界。417 收藏 -
Golang · Go问答 | 20小时前 | CGO · 垃圾回收 · Go问答 · CGO runtime.SetFinalizer runtime.KeepAlive C资源 显式Close 资源生命周期
runtime.SetFinalizer 只能为持有 C 资源的 Go wrapper 提供不确定的释放兜底,不能替代显式 Close。本文用生命周期状态、cgo 指针规则和 runtime.KeepAlive 说明如何避免提前释放、重复释放与关闭顺序错乱。110 收藏