-
低覆盖率主因是未覆盖错误返回、边界输入、并发分支和私有逻辑;需构造失败场景、完善表驱动测试、显式验证并发与初始化副作用,并在CI中设置覆盖率门禁。247 收藏 -
sync.Once.Do不会重复执行,因其用uint32原子变量+CompareAndSwapUint32实现无锁等待,仅首个goroutine执行函数,其余等待完成;若函数panic,状态仍置为已完成,错误被静默吞掉。246 收藏 -
应使用sync.Once(或Go1.21+的sync.OnceValue)实现单例,因其保证初始化仅一次、并发安全、语义清晰;直接用全局变量破坏封装且不安全,手动sync.Mutex易出竞态,且单例对象自身也需线程安全。246 收藏 -
Go语言需手写解释器模式实现Expression解析,因go/parser仅支持Go语法;须定义Expression接口及节点类型,用递归下降解析器处理优先级和括号,并解决类型混合、短路求值与作用域问题。246 收藏 -
Go允许对值类型调用指针接收器方法,因其自动取址机制;二者语义一致,但指针接收器避免结构体拷贝,提升大对象操作效率,并支持修改原值。246 收藏 -
QPS上不去主因是连接卡死、内存拖垮、goroutine堆积或超时未设:http.Client未复用致连接池失效;resp.Body未关闭致fd耗尽;goroutine泛滥且无控速引发调度崩溃;不使用pprof盲目优化。246 收藏 -
Go接口是隐式实现的行为契约,仅定义方法签名;空接口interface{}性能开销大且易出错;接口为nil需同时满足itab和data均为nil;嵌入接口需避免同名方法冲突,接口设计宜精简(2–4个方法)。246 收藏 -
分页需安全解析参数、优化SQL查询路径、合理设计响应结构;空值/负数/超大数须校验,禁用SELECT,避免COUNT()查总数,推荐游标分页保障单调性。246 收藏 -
ReadTimeout应设为5s~15s,覆盖请求头与体到达最坏预期;WriteTimeout设为10s~30s,从响应头写入完成起计时;Go1.22+改用ReadHeaderTimeout+IdleTimeout+context控制。246 收藏 -
锁竞争导致goroutine频繁阻塞和调度开销,拉高延迟、降低吞吐;应通过trace定位竞争、细化锁粒度、慎用RWMutex并避免defer误用。246 收藏 -
Go接口是隐式实现的方法集合,定义时仅声明方法签名,结构体自动满足所有方法即实现接口;支持嵌套组合行为,通过类型断言安全转换具体类型。246 收藏 -
Go反射非万能工具,适用于结构体字段遍历等场景,但性能差、类型不安全;应优先用接口或泛型,仅在需统一处理动态标签时用reflect.StructField,并注意导出、tag解析、嵌套递归、可寻址性及Kind与Name区别。246 收藏 -
在Golang中处理网络IO超时错误需先通过net.Error接口判断,优先检查Timeout()方法以识别超时,结合Temporary()判断可恢复性,并设置合理的连接与读写超时时间,辅以带退避策略的重试机制避免雪崩。246 收藏 -
Go测试函数命名应为TestXxx_WithCondition_ReturnsResult,如TestParseURL_WithEmptyString_ReturnsError;需避免编号式命名,用下划线分三段表达输入→输出,表驱动测试中setup应提取为私有函数,table仅存差异数据,helper函数禁用t.Fatal,测试文件须与被测代码同目录且包名加_test后缀。246 收藏 -
在Go模板中,不能使用类似.a[2]的方括号语法访问数组或切片元素,而必须通过内置函数index实现安全、合法的索引访问。246 收藏