-
slog默认不支持级别过滤,需自定义Handler实现:通过LevelFilterHandler包装标准Handler,在Handle方法中判断rec.Level>=minLevel决定是否输出。
-
Go中没有全局对象,只有包级变量,须在函数外用var声明,首字母决定导出性;多文件初始化顺序不可控,应避免跨文件依赖;并发读写需同步;推荐用sync.Once单例替代init()硬初始化。
-
goroutine泄漏是并发性能下降的头号原因,表现为Mallocs持续上涨、Goroutines数卡在高位;常见于time.After轮询未改用Timer.Reset,以及channel读写不配对导致阻塞。
-
Go的map无法构建DHT,因其仅为本地键值容器,缺乏XOR距离计算、K-bucket动态管理、UDP消息路由等核心能力;DHT要求自治、去中心、基于20字节ID的逻辑距离收敛,而map仅支持O(N)查找且无网络交互能力。
-
Go通过首字母大小写控制可见性:大写为导出(public),小写为非导出(private);结合internal目录限制包访问,实现模块私有管理。
-
Go中var声明不能省略类型又不赋值,因是静态类型语言需编译器明确类型;:=仅限函数内使用,不可用于包级、重复声明、不可寻址左值等场景。
-
断点续传需手动设置Range头并校验服务端支持:先HEAD检查Accept-Ranges,再用http.Client发起bytes=start-请求;本地文件需Seek定位写入,配合Truncate容错;遇416或中断时比对ETag/Content-Length决定全量重下或指数退避重试。
-
配置GOPROXY、GOCACHE和GOMODCACHE以加速依赖下载与编译复用,使用air等热重载工具实现增量构建,禁用CGO减少开销,通过gotest并行测试与合理目录划分提升测试效率,并利用-gobuild-x、-cpuprofile及pprof分析性能瓶颈,保持环境整洁可显著提升Go本地开发效率。
-
连接失败时应先确认Redis服务是否运行:macOS用brewserviceslist或redis-cliping,Linux用systemctlstatus或ps,Docker检查容器与端口映射,远程服务器需修改bind和protected-mode;务必使用github.com/redis/go-redis/v9,Addr不可省略,初始化后调用rdb.Ping(ctx).Result()验证连通性,所有操作必须传非nilcontext,Docker中连宿主Redis需用host.docker.inte
-
泛型最适合处理“逻辑相同、仅类型不同”的重复函数,如SumInts、SumFloat64s等;它通过类型参数化实现同一套逻辑在有限数值/可比较类型上的安全复用,而非盲目适配任意类型。
-
必须用fynepackage打包而非gobuild,因需自动嵌入平台元信息(如macOS的Info.plist、Windows的manifest)、绑定资源路径,并正确处理生命周期;手动构建会导致双击无反应、黑屏或弹控制台。
-
Go推荐用os.CreateTemp和os.MkdirTemp创建临时文件与目录,支持自动命名、权限与路径安全;测试中优先使用t.TempDir()和t.Cleanup()实现自动清理。
-
必须用gobuild-gcflags="-l-N"重新构建二进制,否则火焰图只显示0x41a2c8等地址而无函数名;-l禁用内联、-N禁用优化以保留栈帧和符号信息。
-
Go的map并发写会panic,因运行时检测到concurrentmapwrites;sync.Map适用于读多写少场景,而sync.RWMutex+泛型map更灵活高效。
-
httpmock是拦截并返回预设响应最省事的方式,它无缝接管http.DefaultClient和自定义client,无需改业务代码;需调用httpmock.Activate()启用、httpmock.DeactivateAndReset()清理,否则请求照发或污染后续测试。