-
最稳妥方式是用sync.WaitGroup+sync.Mutex保护错误切片:声明musync.Mutex和errs[]error,每个goroutine执行完后加锁append错误,WaitGroup等待全部完成再返回errs。339 收藏 -
sync.Once.Do传入函数panic后永远失效,因done字段被原子置1且不可逆,不捕获panic也不重试;须在闭包内defer/recover或改用error返回路径,并避免闭包捕获外部可变变量。339 收藏 -
围绕 Go 1.24 正式支持的泛型类型别名,讲清 type Alias[T] = ... 的语义、约束写法、API 迁移、兼容测试和公共库使用边界。339 收藏 -
通过 goroutine profile、阻塞栈和请求路径定位泄漏来源。339 收藏 -
反射调用函数前必须确保接口已导出,即函数或方法名首字母大写;结构体字段若需反射设置也须导出;配置命令需预注册映射表并校验存在性;参数须转为[]reflect.Value;须用recover捕获panic并统一错误处理。338 收藏 -
Go1.16+应使用os.ReadFile和os.WriteFile替代已弃用的ioutil;需追加写或精细控制时用os.OpenFile;路径用filepath.Join和Clean处理;替换配置文件须原子写入。338 收藏 -
goroutine泄露典型表现为内存持续上涨、pprof显示大量runtime.gopark状态goroutine、HTTP响应变慢但CPU不高;主因是未监听ctx.Done()导致goroutine卡在select或time.Sleep中无法退出。338 收藏 -
应使用http.Request.FormFile解析multipart/form-data上传文件,避免手动读取body;服务端须校验Content-Type、文件头魔数及大小,ParseMultipartForm需提前设置。338 收藏 -
Go语言通过libbpf-go或gobpf库在用户态加载和管理eBPF程序,利用其并发、静态编译和系统编程优势,实现高性能、易部署的eBPF工具开发,但需依赖C编写内核态代码,且Go绑定库在部分特性支持上仍有局限。338 收藏 -
sync.Mutex需显式加锁解锁,推荐defer确保释放;RWMutex适用于读多写少场景;零值可用但禁止复制已使用Mutex;竞态检测不能替代正确并发设计。338 收藏 -
安全的fan-out需为每个goroutine显式复制数据流并监听原channel关闭;fan-in应通过goroutine+WaitGroup合并多channel,且必须用context控制生命周期以防卡死。338 收藏 -
推荐json.NewDecoder而非json.Unmarshal,因其流式解析不缓存全文、内存友好,且报错含具体行号便于调试;json.Unmarshal需全量加载字节切片,大文件易致内存暴涨且仅报偏移量。338 收藏 -
Gostruct字段顺序影响内存占用:按类型大小对齐填充,大字段优先排列可减少padding;interface{}比*T多8字节因含类型信息头;CGO需统一struct对齐避免崩溃。338 收藏 -
Go的作用域由词法块决定:变量在哪个{}内声明,就仅在该块及内嵌块中可见;包级变量全包可访问,首字母大写才导出;:=易引发遮蔽;if/for等语句的{}是独立作用域;包级变量按源码顺序初始化,依赖需谨慎。338 收藏 -
strings.TrimSpace只删除首尾Unicode空白符,不处理中间空格;如需清理中间空格,应按需选用strings.Fields+Join、strings.Map或ReplaceAll等方法。338 收藏