Go语言技术文章
-
应使用sync.WaitGroup配合限流channel控制并发,如sem:=make(chanstruct{},10),避免无节制启动goroutine导致文件描述符耗尽或HTTP限流。356 收藏 -
默认http.DefaultClient会复用连接,但需服务端支持keep-alive;手动创建Client未配置Transport时,其MaxIdleConns和MaxIdleConnsPerHost默认为0,导致不复用连接。438 收藏 -
Go默认的http.ServeContent可自动处理Range请求与Accept-Ranges头,从而支持MP4等视频的客户端拖拽播放;而一次性读取整个文件到内存再发送则既不支持寻址,也存在内存和性能风险。Go默认的`http.ServeContent`可自动处理`Range`请求与`Accept-Ranges`头,从而支持MP4等视频的客户端拖拽播放;而一次性读取整个文件到内存再发送则既不支持寻址,也存在内存和性能风372 收藏 -
该用*T而不是T传参时:结构体字段超4–5个或含[]byte、map、[1024]byte等大字段,避免整块内存拷贝;需修改原对象状态时必须用指针;小结构体传值更快;slice/map/chan本身轻量,应直接传值。181 收藏 -
必须用backoff.Retry而不是手写for+sleep,因其内置指数退避、jitter、context取消响应、最大耗时控制及状态隔离,避免重试风暴、间隔错乱和忽略取消信号等线上高危问题。238 收藏 -
gotooltrace打不开浏览器的根本原因是其依赖系统命令(如open/xdg-open/start)启动浏览器,但在无图形界面、容器或PATH异常时失败;应改用-http参数启动本地服务手动访问。434 收藏 -
该写Benchmark而不是Test时,是为回答“快不快”“是否变慢”“谁更省资源”等性能问题,而非验证结果正确性;二者目的不同,不可混用。192 收藏 -
http.HandleFunc不区分HTTP方法,故POST/login与GET/login均命中同一处理函数,需手动校验r.Method;它也不支持路径参数提取和中间件,路由复杂时易出错。208 收藏 -
Cursor生成的Go网络状态机代码类型不安全、测试覆盖不足、存在竞态与泄漏、缺乏Mock隔离——因用string定义状态致编译期无法校验非法赋值,测试仅覆盖主路径而忽略非法转移与并发场景,HandleEvent混入耗时操作且未用context管控生命周期,未抽象网络依赖接口导致测试不稳定。143 收藏 -
GoCDK无法直接统一多云对象存储,因其blob.OpenBucket对各云鉴权、区域、Endpoint差异化处理缺失,且国产云不兼容AWSS3URL格式与签名机制。394 收藏 -
Go中命令模式通过func()类型和结构体组合实现解耦,核心是将行为封装为可传递、存储、延迟执行的值;支持撤销需显式保存undo逻辑,异步执行需防goroutine泄漏,依赖应闭包捕获而非全局查找。342 收藏 -
gomodtidy删除未被import的依赖是正常清理行为,只保留代码中实际引用的包;未import的依赖即使手动添加也会被移除。271 收藏 -
ReadMessage返回websocket.CloseAbnormalClosure(1006)时并非半关闭,而是TCP连接已彻底断开,此时应立即用websocket.IsCloseError确认错误类型、停止读写、清理资源并主动关闭连接。342 收藏 -
应使用StatusError封装HTTP状态码,统一返回带状态码的业务错误;定义AppError结构体规范JSON响应与日志字段;GORM日志需分离慢查询与错误,并重定向至独立输出;log.SetOutput需线程安全且复用文件句柄。207 收藏 -
明确模块边界需为每个组件设独立go.mod文件,统一主干版本管理,用replace/exclude控制依赖,自动化检测孤儿模块、版本一致性、循环引用及API兼容性。479 收藏