-
应使用regexp.Compile而非regexp.MustCompile编写测试,以便显式处理编译错误、精准定位问题;需覆盖空字符串、Unicode(如中文、emoji)、边界字符等场景;匹配应确保完全匹配而非子串查找;性能敏感时预编译并复用正则。
-
GOMAXPROCS并非设得越大越好,其最优值取决于实际工作负载类型(如I/O密集型宜设小值2–4,CPU密集型可适当调高),盲目调高会加剧调度开销、抢占和上下文切换;需结合pprof、trace等工具定位瓶颈,优先优化代码逻辑与资源限制而非单纯调参。
-
合理使用map与slice组合可提升性能,避免用slice作key,应转为string或struct;预分配slice容量减少扩容;优先使用struct+slice替代map;控制map增长防止内存泄漏,采用LRU或定期清理。
-
Go语言支持跨平台编译,只需设置GOOS和GOARCH环境变量即可生成多平台可执行文件,配合CGO_ENABLED控制Cgo、使用shell脚本批量构建或Docker隔离编译环境,可高效实现“一次编写,多端编译”的发布需求。
-
真正通用的Go泛型Filter函数应使用func[S~[]E,Eany](sS,ffunc(E)bool)S签名,解耦切片与元素类型,支持指针/接口切片、避免传值拷贝、复用底层数组提升性能。
-
Go程序健康检查必须由程序自身提供轻量HTTP端点(如/health),HEALTHCHECK应使用curl探测而非进程检查,且需正确配置--start-period、--timeout及||exit1。
-
slice[:0]仅重置长度而不释放底层数组内存,易致内存浪费;真正释放需设为nil并重新make;复用时应结合sync.Pool、预设cap、手动置零等策略综合优化。
-
选用高效序列化协议如Protobuf或MessagePack替代Gob,精简传输字段,复用缓冲区降低GC压力,并按需启用压缩,可显著提升GoRPC性能。
-
滑动窗口不能只用ZREMRANGEBYSCORE清旧数据,因ZSET不保证原子性:清理与计数分离会导致并发插入漏判超限;必须用Lua脚本将ZREMRANGEBYSCORE、ZCARD和ZADD三步封装为原子操作。
-
QPS上不去主因是http.DefaultClient的Transport连接池参数过于保守,MaxConnsPerHost默认仅2,导致并发请求阻塞;需新建Client并调大MaxConnsPerHost、MaxIdleConns等参数,配合Ticker限速、ulimit调优及Context超时控制。
-
GOVERSION文件才是Go版本执行依据,必须与go.mod一致并置于根目录;私有proxy需禁用fallback、配置GOINSECURE;全局环境变量须通过shell脚本或Dockerfile设置,禁用goenv-w;CI须用目标GOROOT编译校验stdlib兼容性。
-
Go反射不提供序列化能力,实际由json.Marshal等完成;reflect.Value.Interface()仅解包值,不能直接序列化;标准序列化器内部用反射处理字段、tag和嵌套,但用户不应重复实现。
-
swaginit不生成docs目录,根本原因是未在项目根目录找到带合法Swagger注释的Go文件;需确保有//@title等基础注释、执行gomodtidy、显式指定-g和-o参数,并使用v1.7+版本支持泛型。
-
JSON解码失败时,json.Unmarshal统一返回json.UnmarshalTypeError或json.SyntaxError,最常见的是json.UnmarshalTypeError;字段缺失本身不报错,需手动校验。
-
GOOS和GOARCH需按目标平台设为合法小写组合,如linux/amd64、darwin/arm64;非法组合会导致构建失败,全量支持列表应以gotooldistlist输出为准。