Go语言技术文章
-
Go 的 crypto/x509 校验证书链时,Roots 是信任锚,Intermediates 只是补齐链路。本文从 PEM 解析开始,演示如何构造 CertPool、设置 VerifyOptions,并区分 DNS、用途和证书有效期等校验边界。486 收藏 -
Go crypto/tls 在启动时加载多份证书,用 GetCertificate 按 SNI 精确选择并拒绝未知名称。示例说明回调调用条件、只读映射、兼容性及证书信任和业务鉴权的区别。434 收藏 -
Go 中不存在可靠的独立端口预检查。用 net.ListenConfig.Listen 直接尝试绑定,成功才代表当前进程取得监听权;不需要固定端口时使用 :0 并从 Listener.Addr 读取系统分配的地址。160 收藏 -
用 Go slices.Chunk 按固定大小遍历任务批次,说明最后一批、空输入、非法批大小、共享底层数组与 slices.Clone 副本边界。413 收藏 -
maps.Clone 复制的是 map 的一层键值,不是递归深复制。本文用嵌套配置示例说明 slice、map、指针字段的共享边界,并给出按场景选择复制方案的方法。334 收藏 -
Go 泛型切片返回值要隔离外层修改,应分配独立数组并 copy。通过 PrefixCopy 示例区分共享视图、容量限制与浅拷贝,说明命名类型、nil、引用元素及迁移检查边界。143 收藏 -
Go 泛型约束可以同时写底层类型集合和接口方法。本文用一个可复用的约束示例说明类型集合、方法集、值接收者与指针接收者之间的边界。171 收藏 -
Go 泛型排序函数应使用 cmp.Ordered 表达可用的有序类型集合。本文从约束边界、命名类型、不可排序类型和浮点 NaN 语义入手,给出可复用写法与选型清单。499 收藏 -
通过 app 与 labelkit 原创示例说明 Go workspace 的 use、模块路径与工作区发现规则,并区分 replace、go work sync 和独立发布依赖,避免本地联调成功掩盖 go.mod 缺口。211 收藏 -
Go 基准测试把多个场景写在同一个 Benchmark 函数里时,结果很难比较。本文用 testing.B 的 Run 方法拆分样本,并把输入准备与计时范围分开,让每个子基准单独呈现 ns/op。179 收藏 -
Go 模糊测试不是输入越大越好。本文用 testing.F 的 seed、前置过滤和 go test 运行参数,把输入长度、无效样本、最小化时间与总运行时间放进一套可控预算。214 收藏 -
用 go test -race 从冲突访问栈和 goroutine 创建栈定位共享 map 竞态,再用同一把 sync.RWMutex 覆盖读取、写入和遍历路径。299 收藏 -
Go modules 的 vendor 模式能把构建所需依赖放进项目目录,但可复现的关键不是简单提交 vendor,而是让 go.mod、vendor/modules.txt 与构建模式保持一致。本文梳理 go mod vendor、-mod=vendor 和团队协作中的固定检查点。309 收藏 -
Go mod tidy 会扫描测试导入和构建标签,测试依赖被调整不一定是误删。本文用导入点、条件测试、-diff 预览和 CI 回归四个检查点,整理出可复查的模块依赖边界。365 收藏 -
Go 测试遇到环境、资源或输入条件不满足时,可以用 testing.T.Skip 或 Skipf 标记为跳过并保留原因。本文说明如何划分 Skip、Fail 与 Fatal 的边界,并给出条件测试、子测试和模糊测试的写法。217 收藏