
全局变量
子测试必须在t.Run内部调用t.Helper()才能正确标记辅助函数;子测试名不可含斜杠,需用下划线或连字符替代;子测试共享父测试生命周期但有独立t实例;重复子测试名会导致运行时panic。
std::error_code比throw更轻量,适合高频预期错误;它是值类型、零开销、无RTTI/堆分配、支持多错误域和跨平台语义归一,需谨慎设计error_category边界。
应使用sync.WaitGroup显式等待goroutine完成:启动前wg.Add(1),结束时wg.Done(),主协程调用wg.Wait();channel由发送方在所有发送完成后关闭;避免ti...
constexpr函数仅在参数为编译期常量时才执行编译期计算,否则退化为普通函数调用;constexpr变量必须用常量表达式初始化;constexpr构造函数要求所有成员明确初始化;consteval...
要跑出有效基准测试数据,需用-gotest-bench=.-benchmem-benchtime=5s-count=3,确保稳定可复现;避免依赖外部状态,正确编写Benchmark函数;最后用benc...
Go值类型传参是浅层内存块拷贝:基本类型字段全复制,引用类型字段仅复制头部;结构体超64字节、高频调用或含大数组时应改用指针传参。
要显示allocs/op,必须同时使用-benchmem参数和在基准函数中调用b.ReportAllocs();allocs/op比B/op更关键,因其反映堆分配次数与GC压力。
Go编译器的逃逸分析自动决定变量是否堆分配,关键在于识别并规避强制堆分配的代码模式:返回局部变量指针、传地址给*T形参函数、赋值给全局变量或interface{}。
Go的regexp.MatchString仅返回是否匹配的布尔值,不提取内容;需用FindString、FindStringSubmatch等函数获取匹配文本或分组。
会,仅当逃逸分析判定指针不逃逸且无实际内存访问时,编译器通过栈分配避免堆分配,并可能在SSA阶段折叠指针计算,而非简单删除&x。