Go教程技术文章
-
json.Decoder卡住是因为它等待完整JSON值,不自动处理流式分块或未闭合结构;需确保输入语义清晰(如NDJSON)或明确边界。342 收藏 -
ReadMessage返回websocket.CloseAbnormalClosure(1006)时并非半关闭,而是TCP连接已彻底断开,此时应立即用websocket.IsCloseError确认错误类型、停止读写、清理资源并主动关闭连接。342 收藏 -
Go中命令模式通过func()类型和结构体组合实现解耦,核心是将行为封装为可传递、存储、延迟执行的值;支持撤销需显式保存undo逻辑,异步执行需防goroutine泄漏,依赖应闭包捕获而非全局查找。342 收藏 -
Go所有参数传递都是值传递,slice、map、chan、func、*T等类型因值中含指针可间接修改原数据;int、string、数组、结构体等则完全拷贝,修改不影响原值。342 收藏 -
本文介绍使用OpenSSH的ControlMaster多路复用机制,在不阻塞主进程的前提下,安全、可检测地建立并验证SSH连接是否真正就绪,适用于需后续复用连接的Go子进程场景。342 收藏 -
Golang · Go教程 | 1个月前 | 错误处理 · Context · 并发控制 · Go教程 · 并发控制 Go教程 context取消 context.WithCancelCause context.Cause
context.WithCancelCause 适合在请求链路中保留明确取消原因,让子任务不只知道 context canceled,还能知道是权限拒绝、上游失败还是主动终止。落地时要区分系统取消和业务错误。342 收藏 -
Go语言中map是引用类型,用于存储键值对,需初始化后使用。通过make或字面量创建,支持赋值、取值、判断存在和删除操作。遍历使用forrange,顺序无序,需排序时可提取键到切片再排序。341 收藏 -
direnv在Go项目中不生效的根本原因是它默认只识别.envrc文件,而非go.mod;需手动创建.envrc并用layout_go设置GOBIN、PATH等,确保路径绝对且与模块一致,修改后须重新运行direnvallow。341 收藏 -
把 HTTP 请求耗时拆成处理、下游、序列化和写回阶段,定位 P99 主要来源。341 收藏 -
本文用一个完整 Go HTTP 服务示例,讲清楚如何在收到 SIGTERM 后先摘流,再等待请求完成,最后用超时上下文关闭服务,避免发布和重启时丢请求。340 收藏 -
Golang · Go教程 | 1个月前 | CI/CD · gitHub actions · Go教程 · 自托管 Runner · 持续集成 · Go 持续集成 CI Go test GitHub Actions self-hosted runner 自托管 runner
GitHub Actions 自托管 runner 开始恢复最低版本要求,Go 项目不要只盯着能不能跑 go test,而要盘点 runner 版本、镜像来源、负载分层和升级节奏,避免测试、构建、发布流水线在强制执行窗口里排队或失败。340 收藏 -
Go1.17+支持(*[N]T)(s)将slice转为数组指针,要求len(s)≥N,否则运行时panic;此前只能用unsafe或copy,后者最安全稳定。339 收藏 -
协程池是为控制资源争抢和避免goroutine泄漏而设的显式限流机制,非所有场景都适用;ants库最成熟,手写需注意缓冲channel、panic捕获及关闭顺序。339 收藏 -
最稳妥方式是用sync.WaitGroup+sync.Mutex保护错误切片:声明musync.Mutex和errs[]error,每个goroutine执行完后加锁append错误,WaitGroup等待全部完成再返回errs。339 收藏 -
sync.Once.Do传入函数panic后永远失效,因done字段被原子置1且不可逆,不捕获panic也不重试;须在闭包内defer/recover或改用error返回路径,并避免闭包捕获外部可变变量。339 收藏