-
Go高并发队列处理需合理组合channel、sync包与有界缓冲策略;用带缓冲channel作轻量队列,配合select+default非阻塞写入;sync.Pool复用任务结构体减GC压力;workerpool控制并发度防goroutine爆炸。
-
Go项目运行不依赖环境变量,但GOROOT、GOPATH、GO111MODULE和PATH影响编译与工具执行;Go1.16+默认启用模块,通常只需设置GO111MODULE=on并确保PATH包含$GOROOT/bin和$GOPATH/bin。
-
频繁调用append()向小容量slice中多次添加少量元素,会触发多次底层数组扩容与数据拷贝,造成显著性能损耗;通过预分配容量或一次性初始化slice,可避免冗余内存操作,大幅提升渲染等高频场景下的执行效率。
-
真正混沌需用ChaosMesh的PodChaos(action:pod-failure)和NetworkChaos,而非直调API或tc;hostNetwork场景下PodChaos失效,应改用NetworkChaos或CNI层注入;单元测试须模拟真实调用链而非time.Sleep。
-
Casbin是Go生态最稳妥的RBAC方案,避免手写权限逻辑引发的角色继承断裂、通配符匹配不一致、策略未刷新等问题;需严格匹配model与policy格式、注意参数顺序、路径匹配函数及热更新机制。
-
Go程序暴露/metrics端点需注册promhttp.Handler()而非手动拼接,使用CounterVec按标签分类统计,确保registry实例一致,避免重启归零需合理配置Prometheus重置容忍机制。
-
os.Open返回*os.PathError的典型场景是打开不存在的路径,此时Err字段为ENOENT、Path字段记录路径;须用errors.Is(err,os.ErrNotExist)而非==判断,以支持错误包装;权限不足用errors.Is(err,os.ErrPermission);检查存在性应优先用os.Stat配合os.IsNotExist/os.IsPermission;os.OpenFile的flag影响错误类型,如os.O_CREATE不创建父目录;跨平台需统一用errors.Is或os
-
Go标准库net/http默认不重试,重试需手动实现;gRPC客户端支持声明式重试但需满足三条件;重试必须考虑幂等性、退避策略、上下文超时及系统容量约束。
-
Go中防SQL注入唯一靠谱的方式是参数化查询,必须用于所有用户输入的值;结构部分(如ORDERBY、表名)需白名单校验,Scan需严格匹配类型与顺序。
-
BurntSushi/toml仅支持读取,无Encode功能;写配置需换用pelletier/go-toml/v2,它支持双向操作、缩进、注释保留等高级特性,且v2与v1及BurntSushi不兼容。
-
必须用unsafe.Pointer的场景包括:与C交互(如C.malloc)、底层原子操作、自定义序列化时直接读写结构体字段偏移;需配合Offsetof确认字段位置,禁止对interface{}/map/slice/func转换,uintptr不能长期持有以防悬空指针。
-
Go集成ClickHouse核心难点是写稳、读准、跑久:需显式配置Auth与Protocol防401/dialtimeout;批量写控1万–10万行并复用batch防OOM;时区统一设Asia/Shanghai,Nullable字段用sql.NullString;查询必设context超时与max_execution_time。
-
Go反射读取结构体字段需确保字段导出且通过Elem()解引用指针;修改字段需可寻址和可设置;调用方法须导出并匹配接收者类型;反射性能低且类型不安全,应避免在热路径使用。
-
Go中Adapter常“没用上”是因为其本质是函数或类型转换层,用于桥接接口而非类适配;需检查方法签名是否完全匹配、指针接收者要求及error等类型严格性,必要时用wrapper类型或函数适配器实现。
-
net.Conn不能直接复用,因其绑定唯一文件描述符和缓冲区,且不保证并发安全;并发读写会导致数据错乱或连接重置,须用“一连接一goroutine”模型并分离读写协程。