Go语言技术文章
-
Go benchmark 会把计时从 benchmark 开始处算起,初始化放错位置就会污染 ns/op。本文用 ResetTimer、StopTimer/StartTimer 和 benchmem 说明怎样只测目标操作。266 收藏 -
Go crypto/ecdh.PrivateKey.ECDH 使用本地私钥和对端公钥计算共享密钥,前提是两把密钥使用同一条曲线。本文用 P256 示例说明两端配对、错误处理以及共享密钥进入 KDF 或 AEAD 前的边界。266 收藏 -
Go 的 http.Cookie 通过 SameSite 生成 Set-Cookie 属性,但是否在跨站请求中发送由浏览器决定。本文比较 Strict、Lax、None 的边界,并给出 Go 服务端的配置与排查方法。266 收藏 -
在Go语言里,float64采用的是IEEE 754标准。也正因为如此,它没法把大多数十进制小数准确无误地存下来,比如π、0.1这类数字,放到二进制浮点体系里就只能做近似表示。结果就是,在面积累加这类连续运算中,末尾往往会冒出一点点误差,例如178.53981633974483最终可能变成178.5265 收藏 -
Go 的 hash/maphash 用 Seed 把哈希随机性与具体计算分开。本文通过可运行示例说明 MakeSeed、Seed 复用、Hash.SetSeed 与不可序列化边界,帮助你在内存索引中稳定使用它。265 收藏 -
短超时压测后 Goroutine 数量不回落,不一定都是 Context 失效。本文用 worker pool 拆开工作取消与结果发送两个等待点,给出可执行的 Go 修复写法和 pprof 定位方法。265 收藏 -
Golang · Go问答 | 1个月前 | 错误处理 · go · Go errors.As errors.As 指针目标 errors.As 非指针类型 Go 错误链匹配 Go Error 接收者
围绕 Go errors.As 的指针与非指针目标写法,解释 Error 接收者、%w 包装、接口目标和常见 panic 边界,给出可直接套用的判断表与代码示例。265 收藏 -
filepath.Clean只能规范化路径字符串,不能证明文件仍在允许目录内。本文用 filepath.Rel 做词法范围判断,再说明符号链接、绝对路径和并发替换的防护边界。265 收藏 -
用 Go tls.Config.GetCertificate 根据 SNI 动态选择证书,覆盖精确匹配、通配符、默认回退、并发读取与热更新边界。265 收藏 -
Go 测试中 t.Parallel 与 t.Setenv 不能直接混用。本文用串行父级、配置注入和串行分组三种组织方式,解决全局环境变量影响并行子测试的问题。265 收藏 -
讲清 Go bufio.Reader.Peek 预读固定协议头时的参数、缓冲区和切片生命周期边界,并用 8 字节 TCP 协议头示例处理 ErrBufferFull、截断输入、长度校验与安全消费。265 收藏 -
Go Fuzz 的种子语料可以分成代码里的 f.Add 样本和 testdata/fuzz/FuzzTestName 目录语料。本文用一个可迁移的 FuzzDecode 示例说明两种来源怎样配合、目录文件怎样命名、参数类型怎样对齐,以及失败样本如何沉淀为回归用例。265 收藏 -
Go map 的 range 顺序没有稳定保证。本文用收集键、排序键、按键取值的方式实现可重复输出,并补充整数键、按值排序、JSON 序列化和测试快照的边界。265 收藏 -
Go 1.24 之后,tls.Config.CurvePreferences 显式设置会覆盖默认密钥交换集合。本文说明如何重新启用 X25519MLKEM768,并处理 TLS 版本、客户端服务端重叠和传统回退。265 收藏 -
unsafe.Pointer 转换只改变地址视图,不会自动延长 Go 对象生命周期。本文从外部同步调用和对象可达性断点说明 runtime.KeepAlive 的正确位置,并区分 C 代码跨调用保存 Go 指针时的 Pinner、C 内存和 cgo.Handle 方案。264 收藏