Go语言技术文章
-
本文用问答方式解释 Go map 并发读写为什么会 panic,并给出从场景判断、锁保护、sync.Map、channel 单写到压测检查的完整选型流程。368 收藏 -
Golang · Go教程 | 1星期前 | goroutine · Context · 超时控制 · Go教程 · 后端开发 · Go Goroutine context 超时控制 WithTimeout Done QueryContext
本文用完整工作流讲解 Go context 超时控制:从 HTTP 入口创建超时预算,把 ctx 传给 DB 查询和远程请求,到 goroutine 监听 Done、及时退出并释放资源,最后给出验证和上线清单。166 收藏 -
Golang · Go问答 | 1星期前 | map · RWMutex · sync.Map · go并发 · Go问答 · Go channel map 并发读写 Fatal error RWMutex sync.Map
本文用完整工作流回答 Go map 并发读写为什么会崩:先复现 fatal error 和 data race,再定位共享 map,最后按场景选择 RWMutex、sync.Map 或 channel 收口,并给出上线前检查清单。379 收藏 -
本文用完整工作流讲解 Go defer 的常见疑问:为什么 defer fmt.Println(i) 打印旧值,defer 注册时参数何时保存,闭包为什么能读到新值,命名返回值如何在 defer 中包装错误,以及多个 defer 为什么按倒序触发。153 收藏 -
本文解释 Go for range 中 goroutine 打印错值的问题,区分 Go 1.22 新循环变量语义和旧模块行为,并给出版本检查、代码排查、兼容写法和验证清单。315 收藏 -
Golang · Go教程 | 1星期前 | WaitGroup · channel · 并发编程 · 优雅关闭 · Go教程 · WaitGroup Channel关闭 Go channel 并发收尾 done信号
本文把 Go channel 关闭拆成一套可复用工作流:先确定谁负责关闭,再用 done 信号通知停止,用 WaitGroup 等待协程收尾,最后关闭结果通道并验证没有 panic 和泄漏。165 收藏 -
本文用 Go 接口返回 JSON 的现象入手,逐步验证 nil slice 和空 slice 在 len、cap、底层数组、json.Marshal 输出上的区别,并给出 API 响应保持 [] 的初始化方案。157 收藏 -
本文用 Go 批量处理文件时出现打开失败的案例,逐步复现 defer 放在循环里的句柄堆积问题,并通过封装单文件处理函数让 Close 及时触发,最后给出复查清单。332 收藏 -
Go 服务调用外部 HTTP 接口时,如果没有设置超时,慢接口可能让请求一直等待。本文从复现现象开始,逐步定位原因,并给出 Client.Timeout 与 context 截止时间两种可靠写法。115 收藏 -
Golang · Go教程 | 1星期前 | errgroup · go · Context · 并发编程 · SetLimit · Go 并发任务 errgroup SetLimit context取消
Go 后端经常需要并发查询多份数据。本文按完整工作流拆解 errgroup.WithContext、错误取消、SetLimit 控制并发、互斥收集结果和 Wait 统一检查,避免任务失控。301 收藏 -
Golang · Go教程 | 1星期前 | map · 并发安全 · RWMutex · sync.Map · Go教程 · 并发安全 RWMutex sync.Map Go map并发读写 go test race
Go 原生 map 不能在无保护情况下并发读写。本文用完整工作流拆解:先复现 fatal error,再用 race 检查定位,随后用 RWMutex 修复,并说明分片 map 和 sync.Map 的选型边界。272 收藏 -
本文回答 Go 里 sync.Once 为什么能保证函数只执行一次、多个协程同时调用时内部做了什么、以及在配置加载、单例初始化和懒加载里怎么安全复用。142 收藏 -
本文回答 Go range 循环变量取地址为什么容易踩坑:旧语义下多个指针可能指向同一个循环变量,Go 1.22 后每轮变量语义改变,但如果目标是修改原切片元素,仍应使用索引取址。319 收藏 -
本文用商品详情接口讲清 Go singleflight 的用法:缓存未命中时把同一个 key 的并发请求合并成一次查询,回填缓存后共享结果,并补上超时和兜底处理。114 收藏 -
用两个最小复现解释 Go slice 的 append 行为:当 cap 够用时会复用底层数组,原 slice 可能被间接改动;当 cap 不够时会分配新数组,后续修改互不影响。236 收藏