-
因为net/rpc缺乏跨语言支持、服务发现、健壮超时与上下文取消、错误分类及panic恢复等生产必需能力,仅适用于学习或轻量内部通信。
-
策略模式是一种将算法或行为封装成独立结构体的设计模式,通过统一接口实现动态切换。其核心是定义一个公共接口,让不同策略实现该接口的方法,并通过上下文结构体持有并执行当前策略。例如,在电商系统中,可通过策略模式实现满减、折扣等促销方式的灵活替换。使用策略模式的优势包括解耦业务逻辑、提升可维护性和扩展性,适用于支付渠道、日志记录、消息通知等多场景。应用时需注意接口设计的合理性、策略数量较多时引入工厂模式管理创建,以及避免过度抽象。
-
GoHTTP客户端必须显式配置超时,推荐自定义http.Transport设置各阶段超时,并通过context.Context透传deadline,避免全局DefaultClient和硬编码dial选项,超时值需基于P99延迟分层设定并联动重试熔断。
-
Go编译Windowsexe需显式设GOOS=windows和GOARCH,否则生成非PE文件;闪退多因CGO依赖VC++运行库,应设CGO_ENABLED=0;-o仅控制输出名,图标、版本等需go-winres等工具处理。
-
gorilla/sessions是最省心也最安全的GoSession方案,但需严格遵循安全配置:密钥≥32字节、显式设置HttpOnly/Secure/SameSite、登录后重生成ID并清旧Cookie、存储层TTL与MaxAge一致、禁用纯Cookie存储敏感数据。
-
不能直接用time.Now().UnixNano()生成分布式ID,因其纳秒级时间在高并发下仍会重复,且无机器/进程标识导致跨节点不唯一;加锁串行化则引发性能瓶颈。
-
使用预编译语句、多值插入、事务控制和分批并发策略可显著提升Golang批量插入性能。1.预编译减少SQL解析开销;2.多值INSERT降低网络往返次数;3.显式事务避免频繁自动提交;4.分批并发提高吞吐量,合理控制批次大小与连接数。
-
gofpdf是Go生成PDF最简单稳妥的选择,纯Go实现、API稳定、需手动添加中文字体、非goroutine安全、无内置表格功能,须手动绘制并注意分页与并发控制。
-
优化Golang微服务网络通信需优先采用HTTP/2+gzip/zstd压缩响应体,并复用HTTP连接池;gRPC+Protobuf适用于高吞吐场景;须避免重复压缩、TLS层压缩及局部创建http.Client。
-
gomodinit只创建go.mod文件,声明模块路径并设为根目录,不生成go.sum或目录结构;重复执行不覆盖,除非加-force。
-
Go语言中sync包提供Mutex、RWMutex、Once和WaitGroup实现并发安全:1.Mutex通过加锁保护共享变量避免竞态;2.RWMutex在读多写少场景提升性能,允许多个读锁共存;3.Once确保初始化操作仅执行一次;4.WaitGroup用于主线程等待所有goroutine完成任务。
-
Go的http包默认支持长连接,通过自定义Transport设置MaxIdleConns、MaxConnsPerHost、IdleConnTimeout等参数可优化客户端连接复用;服务端需配置ReadTimeout、WriteTimeout和IdleTimeout以合理管理空闲连接;对于SSE等流式场景,应使用http.Flusher定期推送数据并监听context.Done()处理断连;结合CloseIdleConnections和优雅关闭避免资源泄漏。
-
Go连接Web需分场景:用http.Client发起HTTP请求、http.ListenAndServe启动服务端、gorilla/websocket实现WebSocket长连接;注意超时设置、TLS校验、路由注册顺序、Upgrade头缺失等常见坑。
-
syscall是性能瓶颈,因其涉及用户态/内核态切换、寄存器保存/恢复及权限检查等开销,高并发下显著拖慢吞吐;容器或云环境中该开销更明显。
-
禁用默认事务可提速但需分场景:全局用SkipDefaultTransaction:true,单次用Session;Preload需精简字段防N+1;FindInBatches要求主键单调递增;Select字段和QueryFields模式减少开销;连接池与context不可忽视。