Go语言技术文章
-
Go 1.27 针对小对象的专用内存分配器可降低分配成本,但它不会替服务端回收仍被引用的对象。本文用请求缓冲、缓存切片和 goroutine 三个边界,说明如何判断分配变快与对象活得过久是两件事。463 收藏 -
Go 1.27 新增 uuid 标准库包,提供 New、NewV4、NewV7、Parse 等 API。本文用请求 ID 和数据库主键两个场景说明随机 UUID、时间有序 UUID、Parse 与 MustParse 的选择边界,帮助已有第三方依赖的项目平稳迁移。463 收藏 -
Go HTTP 接口不必启动真实端口就能测试。本文用 httptest.NewRequest 和 httptest.NewRecorder 构造 Handler 的输入输出,再分别断言请求参数、方法、状态码、响应头和正文,并说明 Handler 单元测试与真实服务器测试的边界。463 收藏 -
Go 的 utf8.DecodeLastRuneInString 处理空字符串时返回 RuneError 和 size=0。本文用返回值对照、UTF-8 多字节裁剪示例,区分空输入、合法 U+FFFD 与非法尾字节。463 收藏 -
Go 的 nil channel 可以让 select 分支动态失效。本文区分 nil、开放和关闭 channel,演示双输入 fan-in 如何在识别 ok=false 后安全退出。463 收藏 -
通过包装 tls.ClientSessionCache 记录 Get、Put 与命中,再用 ConnectionState.DidResume 区分缓存命中、TCP 连接复用和真正的 TLS 会话恢复。463 收藏 -
从 net.Listen 的 network 和 address 入手,判断 Go TCP 监听只接受 IPv4 或 IPv6 的原因,并给出单族监听与显式双监听的处理方案。463 收藏 -
Go 默认把解码到 interface{} 的 JSON 数字变成 float64,UseNumber 则先保留为 json.Number。本文用示例说明精度变化发生在哪里、如何解析以及金额等场景的边界。463 收藏 -
Go cgo 交叉编译出现 C compiler not found,通常是交叉编译启用了 cgo,却没有把 CC 指向目标平台的 C 编译器。本文按环境变量、编译器匹配、sysroot 与无 cgo 回退路径逐层排查。463 收藏 -
围绕 Go maphash.Hash 的内部缓冲、Reset、String/Bytes 和 sync.Pool,说明如何按输入形态复用哈希状态并定位真正的堆分配来源。463 收藏 -
Golang · Go问答 | 1个月前 | Context · 并发编程 · go语言 · 错误排查 · Go并发 context.AfterFunc sync.OnceFunc Stop竞争 重复清理
context.AfterFunc 返回的 Stop 只能阻止尚未开始的回调,不能等待已启动回调结束。本文用共享 OnceFunc 清理入口与 done 完成信号处理 Stop 和取消同时发生的竞争,并说明调用所有权、阻塞与独立清理 Context 的边界。463 收藏 -
Go 的 httptest.NewUnstartedServer 适合在启动 HTTPS 测试服务前修改 TLS 策略。本文说明 TLS、HTTP Server 配置与 StartTLS 的先后关系,并给出测试客户端和迁移检查清单。463 收藏 -
用 Go 的 exec.Cmd.Environ 查看子进程实际配置的环境快照,理清 Dir、Env、PWD 和重复环境变量之间的覆盖关系,定位工作目录或环境变量不符合预期的问题。463 收藏 -
Write 返回成功不代表数据已经到达稳定存储。本文用 Go os.File.Sync 拆开写入、同步、关闭和文件替换的边界,给出可复用的错误处理写法。463 收藏 -
Go 1.27 对声明 go 1.27 及以上的模块合并零散 require 块。本文区分布局、indirect 与依赖版本变化,说明注释保留、工具链范围和团队接纳方式,避免把正常整理误判成升级。463 收藏