-
Go中通过反射调用函数需用reflect.Value.Call,参数和返回值均为[]reflect.Value切片,要求类型数量严格匹配,导出函数才可调用,方法需绑定接收者并注意指针/值接收者区别。
-
fmt.Errorf用于创建带格式的错误信息,支持插入变量和用%w包装原始错误以保留上下文,适用于需添加上下文或构建错误链的场景。
-
竞态条件是多个goroutine无同步地读写共享内存导致行为不可预测;应通过Mutex、RWMutex或atomic避免。Mutex需保护所有访问并合理控制粒度;RWMutex适用于读多写少场景;atomic适合简单数值和指针的无锁操作。
-
合理配置超时可防止阻塞和资源耗尽,应设置http.Client的Timeout(如10秒)以控制总时长,生产环境必须显式定义;对于高并发场景,需自定义Transport来精细化管理DialTimeout、TLSHandshakeTimeout等参数(如TCP连接5秒、响应头10秒),提升性能与连接复用;同时避免超时过短、缺乏重试退避、共用客户端等问题,不同接口按需设置(如支付30秒、内部调用2~5秒),并监控超时频率以评估服务健康度。
-
GoWeb响应性能优化核心是连接池调优与异步处理:合理设置sql.DB的MaxOpenConns、MaxIdleConns、MaxIdleTime和ConnMaxLifetime;HTTPhandler中剥离耗时操作,用goroutine或workerpool异步执行,并配合context超时控制;同时调优http.Server的超时参数与连接管理。
-
Go内存分配器基于TCMalloc思想,采用mcache、mcentral、mheap三级结构管理内存,按sizeclass分类减少碎片。高频分配场景下仍需优化:1.使用sync.Pool复用小对象,降低GC压力;2.预分配slice容量,避免频繁扩容;3.合并小块内存分配,提升局部性;4.利用pprof分析分配热点,定位高频短生命周期对象;5.关注GC停顿与内存增长趋势。合理调优可显著减少内存碎片与分配开销。