golang
已收录文章:14011篇
-
Ginkgo和Gomega可用于用Go语言编写行为驱动开发(BDD)测试。实战案例演示了针对购物车应用程序编写的BDD测试,其中验证了添加商品和计算总价行为。要运行测试,可以使用ginkgo命令。273 收藏
-
反射在Go的encoding/json标准库中用于动态获取结构体字段信息和标签解析,从而实现自动序列化与反序列化。①通过反射,程序可在运行时获取结构体的类型、字段名、值及标签内容(如json:"name");②反射解析标签中的键名和选项(如omitempty),决定字段是否导出、是否忽略或为空时省略;③标准库首次使用结构体时会缓存其反射信息以提升后续性能;④反射还处理匿名字段,将其字段合并到外层结构体中。这使得JSON编解码具备高度灵活性,但也带来一定性能开销,适用于大多数常规场景。273 收藏
-
Golang使用指针实现类似C++引用参数的功能,允许函数修改外部变量的值。1.函数通过接收变量地址并解引用指针来修改原始值;2.使用指针可提升性能,尤其在处理大型数据结构时避免复制;3.需注意空指针、忘记解引用和指针别名等常见错误;4.与C++引用相比,Go指针可为nil、可重新赋值、支持算术运算。上述机制确保了Go中指针既能高效操作数据,又具备一定的灵活性和安全性。273 收藏
-
Golang的archive/zip库通过zip.Writer和zip.Reader实现ZIP文件的压缩与解压,压缩时需为每个文件创建zip.FileHeader并写入相对路径以保留目录结构,解压时需校验路径防止ZipSlip漏洞;处理大文件时依赖流式I/O避免内存溢出,但需注意磁盘I/O、CPU消耗及小文件数量带来的性能瓶颈,可通过调整压缩级别、并发处理和缓冲区优化提升效率;常见错误包括文件I/O失败、ZIP格式无效、路径安全风险等,应全面检查错误、包装错误信息、验证路径合法性并确保资源及时释放。273 收藏
-
使用channel和WaitGroup可安全汇总goroutine错误,示例中通过带缓冲的errorchannel收集各任务错误,wg确保等待所有协程完成,最后遍历channel获取全部错误;若用errgroup则更简洁,但需注意返回nil以避免提前终止。273 收藏
-
结构体复制开销大,指针传递高效。大型结构体或需修改时应使用指针,小结构体可传值以提升性能并减少GC压力,结合场景权衡选择。273 收藏