-
Go语言可用net/http+中间件+路由分发构建轻量API网关,适合中小团队灰度路由、协议转换等场景;需用gorilla/mux或httprouter实现动态反向代理,支持路径重写、健康检查与服务发现,并通过fsnotify实现配置热更新。
-
Go标准库reflect包没有DeepCopy函数,需手动实现深拷贝;关键点包括处理nil指针/slice/map、不可寻址值、函数/channel/unsafe.Pointer等特殊类型,并防范循环引用。
-
Go语言所有参数都是值传递;slice、map、chan等类型传的是含指针的结构体副本,故可修改底层数据,但无法改变其头部字段或变量绑定。
-
WorkerPool通过控流、复用和解耦提升吞吐量:固定worker数量避免goroutine泛滥,任务提交与执行分离实现快速响应,带缓冲channel支持背压感知;需合理配置worker数(CPU型≈核数,IO型2~5倍)、缓冲大小(略超峰值),并防范panic、超时、竞态等稳定性陷阱。
-
测试Go函数参数边界需覆盖极值、零值、空值和非法值,使用testing库结合表驱动测试。例如测试整数运算需考虑math.MaxInt等极值,字符串需测空、超长、特殊字符,切片要覆盖nil、空、单元素等情况,通过结构体定义用例统一验证。
-
合理配置Go构建缓存、模块代理与并发参数可显著提升构建效率。1.启用GOCACHE并定期清理;2.设置GOPROXY为国内镜像如goproxy.cn加速依赖拉取;3.预下载依赖gomoddownload减少网络耗时;4.根据环境调整GOMAXPROCS控制并发,低配机器限流防OOM,调试时关闭优化加快编译。
-
测试Go函数参数边界需覆盖极值、零值、空值和非法值,使用testing库结合表驱动测试。例如测试整数运算需考虑math.MaxInt等极值,字符串需测空、超长、特殊字符,切片要覆盖nil、空、单元素等情况,通过结构体定义用例统一验证。
-
Go中实现可重试错误处理需判断临时性错误(如超时、5xx状态码)、用errors.Is/As识别、配合指数退避(100ms起)、限制次数(3~5次)并检查context取消。
-
微服务架构通过服务发现与负载均衡保障系统稳定。服务实例注册至注册中心(如Nacos),消费者按服务名调用,实现解耦;客户端集成Ribbon或SpringCloudLoadBalancer,采用轮询、随机、权重等算法分发请求,提升资源利用率;OpenFeign封装远程调用,结合断路器(Resilience4j)防雪崩,支持拦截器统一处理认证日志;熔断机制在错误率超阈值时切断调用,避免级联故障,配合超时重试与动态配置优化可靠性。
-
应使用context.Context控制goroutine生命周期,通过WithCancel、WithTimeout等派生上下文实现主动取消与超时终止,避免time.Sleep、轮询flag或强杀进程;channel要遵循发送方关闭、select阻塞通信、struct{}传信号等原则。
-
Go配置管理需用结构化格式+显式解码,viper加载YAML须显式设路径并调用ReadInConfig;JSON反序列化要求字段导出且带正确tag;多环境通过APP_ENV变量控制路径;敏感字段应绑定环境变量;热更新极少必要,多数场景启动时加载一次即可。
-
用-p=1强制包级串行可解决跨包数据库冲突,因默认并行导致多包共用同一PostgreSQL实例而互相干扰;-parallel0或-cpu1仅限单包内并发控制,无效于包间隔离。
-
Go中指针的零值为nil,声明未初始化的指针默认指向nil,解引用会引发panic;结构体、数组、切片等复合类型中的指针字段或元素也会被自动初始化为nil,需显式分配内存或赋值;new(T)返回指向零值的指针,适用于基础类型和指针类型初始化,而&struct{}{}常用于结构体实例化;正确处理nil状态可避免运行时错误。
-
Go中建造者与工厂模式结合:工厂封装创建入口并分发类型,建造者控制构造细节,支持链式配置与Build组装,职责分离且易于扩展。
-
使用过期时间、定时清理协程、LRU策略和context控制实现Go缓存清理,通过sync.RWMutex保证并发安全,结合场景选择合适策略以平衡性能与内存。