golang
已收录文章:240篇
-
答案:Golang中匿名函数的动态调用依赖将函数作为interface{}存储并通过reflect包在运行时调用,核心在于利用反射实现运行时函数执行,适用于RPC、插件系统等需灵活调用的场景。105 收藏
-
Go语言通过crypto/tls包实现安全通信,使用ListenAndServeTLS启动HTTPS服务器需配置证书和私钥;建议自定义tls.Config以禁用旧版本、启用强加密套件,并通过http.Transport配置客户端证书验证,生产环境应避免InsecureSkipVerify,使用可信CA签发证书确保安全。104 收藏
-
CGo边界开销源于Go与C运行时模型差异,导致每次调用需上下文切换、内存同步和栈转换,核心优化策略包括:1.批量处理调用,减少跨语言调用次数;2.使用unsafe.Pointer传递指针,避免数据拷贝,结合runtime.KeepAlive防止GC过早回收;3.复用长生命周期C对象,降低初始化开销;4.通过pprof等工具精准定位性能瓶颈,针对性优化。103 收藏
-
答案:在Go语言中测试数据库操作需确保隔离性、快速性和可重复性。1.使用专用测试数据库(如myapp_test),通过T.Cleanup()自动清理数据,避免影响真实环境;2.采用SQLite内存模式(:memory:)提升速度并保证干净状态,但需注意SQL语法兼容性;3.利用sqlmock等工具模拟数据库行为,验证SQL执行与参数,适合测试错误路径;4.集成测试中使用事务包裹操作,测试后回滚以保持数据纯净。选择策略应基于项目需求:mock和内存库适合单元测试,真实数据库加事务回滚适用于集成测试,核心是保101 收藏
-
以慢接口排查为线索,讲 Go pprof 的 CPU、heap、goroutine、block profile 使用顺序和常见误判。101 收藏
-
状态模式通过接口和结构体组合在Golang中实现,将订单等对象的不同状态封装为独立结构体,每个状态实现同一行为接口,如Pay、Ship、Complete;初始状态为待支付,调用Pay后状态切换为已支付,再调用Ship变为已发货,最后Complete进入已完成状态,各状态对操作返回不同结果并控制状态转移,避免了冗长条件判断,新增状态只需扩展新结构体而不修改原有代码,符合开闭原则,提升了可维护性与可扩展性。100 收藏