-
timer.After不能用于循环重置定时任务,因其返回单次通道、读完即关闭;应改用time.NewTicker或time.NewTimer配合Reset。
-
应使用bytes.Buffer替代os.File进行基准测试,因其零系统调用、无IO干扰;需在每次迭代前重置缓冲区以避免数据累积导致吞吐量虚高。
-
struct字段顺序影响缓存命中率,因字段按声明顺序连续布局,高频字段应紧凑排列于开头以共用缓存行,大或低频字段置末尾;伪共享需手动填充对齐至64字节边界;range遍历时应顺序访问以提升预取效率。
-
Go的net/http不支持断点续传或多段并发下载,需手动实现:先HEAD获取Content-Length,再按并发数均分Range;用WriteAt预分配文件空间后并发写入;通过带缓冲channel控制goroutine数量。
-
Go中string与[]byte转换并非零拷贝:string([]byte)安全但[]byte(string)会拷贝数据;真正零拷贝需用unsafe.String和unsafe.Slice(Go1.20+),但须确保内存生命周期并规避UTF-8验证风险。
-
Go1.16+推荐用os.WalkDir替代filepath.Walk,因其按字典序遍历、避免symlink循环panic、通过DirEntry减少30%系统调用,且支持主动跳过权限错误;需区分处理IsNotExist、IsPermission及其他错误。
-
ErrGroup是为“任一goroutine出错即取消其余任务”设计的同步原语,封装WaitGroup和Context,自动处理取消传播与错误收集;手动用WaitGroup加全局error变量会导致竞态、漏判和无法及时中断。
-
Gosync包提供底层同步原语,误用易致死锁、竞态或性能退化;应依场景选Mutex/RWMutex,慎用Once.Do,WaitGroup.Add须在goroutine启动前调用,Pool仅适用于GC可控的临时对象复用。
-
Go通过接口+方法组合实现访问者模式:Element接口定义Accept方法,各具体类型实现并调用visitor对应Visit方法;Visitor接口声明VisitBook、VisitVideo等,新增操作只需实现新访问者,无需修改原有结构。
-
Go微服务测试核心是隔离依赖、可控模拟、快速验证,常用httptest.Server模拟HTTP下游,接口抽象+mock实现gRPC调用替换,结合Wire/fx管理依赖,集成测试用testcontainers组合轻量容器。
-
应使用asdf管理Go版本,因其通过asdf-golang插件独立安装各版本、动态调整PATH、不修改GOROOT,兼容go.mod/go.work;避免gvm(已停更)及手动维护导致的GOROOT冲突、CI失败等问题。
-
生产环境推荐excelize(功能全、支持流式写入)或goxlsx/xlsx(轻量、仅基础读写);解析时需注意类型转换、空行处理、编码与合并单元格;导出大数据量应使用StreamWriter并手动GC;数据库导出前须做类型桥接与列名清洗,并用OpenFile校验文件完整性。
-
Go原生map要求键类型必须满足严格可比较性(comparable),不支持用户自定义哈希与相等函数;但可通过提取语义唯一、不可变的派生键(如int或string)间接实现自定义相等逻辑。
-
使用os.Open读取二进制文件,结合binary.Read解析结构化数据,按长度前缀读取变长字段,用binary.Write写入数据,核心是掌握字节序与数据布局。
-
XML与Gostruct映射需手动通过xmltag精确绑定标签名、属性及层级,否则字段解析为空;大小写、连字符、下划线须完全一致,属性用,attr标记,重复标签用xml:"parent>child"或嵌套struct处理。