Go问答
已收录文章:59篇
-
Go 里 crypto/rand 和 math/rand 都能生成随机值,但用途完全不同。本文用验证码、抽样和测试数据三个场景拆开安全资产、攻击路径、并发控制与验证方法,给出不容易选错的边界。163 收藏
-
Go 用 json.Decoder 读取 HTTP 请求体时,第二次 Decode 得到 EOF 不一定是异常:它可能代表输入已正常读完,也可能是把单个 JSON 请求误当成了连续流。本文从单对象、尾随空白和多值 JSON 三种边界出发,给出最小判断、严格校验与可复查的读取流程。160 收藏
-
Go 的 Functional Options 能让构造函数同时保留合理默认值和可读的可选配置,但它不适合掩盖必填依赖。本文用一个 HTTP Client 组件说明 Option 的最小写法、默认值与必填项的边界、常见反例和测试清单。153 收藏
-
Golang · Go问答 | 2个月前 | 并发 · time · 定时任务 · Timer · Go问答 · 定时器 Go 定时任务 停止 time.Ticker time.After time.NewTimerGo 里一次性超时、可重置等待和周期任务分别适合 time.After、time.NewTimer 与 time.Ticker。本文用三个小场景对比它们的触发语义、停止方式、慢任务边界和 Go 1.23 定时器变化,给出可直接复用的选择规则。144 收藏
-
Go 1.21 引入的内置 clear 可以直接清空 map 或切片,但它不会让并发访问变安全,也不会替你决定是否复用底层存储。本文从请求缓存复用场景对比 delete 循环、重新 make 和 clear 的语义、容量与并发边界。137 收藏
-
sync.Once 只保证初始化逻辑最多执行一次,失败也不会自动重试。通过区分一次性成功初始化、可重试初始化和启动失败退出,避免把错误状态永久缓存进服务进程。133 收藏
-
Go 编译到浏览器 WebAssembly 后,可以通过 syscall/js 调用 localStorage。关键是使用 GOOS=js GOARCH=wasm 构建,保持 Wasm 运行时脚本与编译器大版本一致,把 JavaScript 调用收口并处理存储不可用、JSON 损坏和 MIME 类型错误。122 收藏
-
Go 服务出现 too many open files 时,先不要只把 ulimit 调大。更可靠的处理顺序是确认 FD 是否持续增长、按类型定位 HTTP 响应体/文件/SQL Rows 的释放缺口、在小流量修复后观察 FD 回落,再决定是否需要调整进程限额。文章给出可直接照着做的线上判断、代码修复、回退和告警检查。115 收藏
-
Golang · Go问答 | 2个月前 | golang · 超时 · HTTP · Go问答 · 网络排查 · 连接超时 http.Transport Client.Timeout Go HTTP 客户端超时 TLS握手超时Go 的 http.Client 超时太粗时,DNS、建立连接、TLS 握手和响应读取会混在同一个等待里。本文用一段可复现的慢请求场景拆开 Transport 参数,给出基线指标、改动方案和复测边界。112 收藏
-
Go 里用 slices.Delete 删除元素后,切片长度变小不代表底层数组立刻释放。要结合 Go 版本、元素类型、尾部引用是否清零和切片是否继续持有容量来判断 GC 边界。本文从批量过滤场景拆开删除、复用与内存回收的关系。112 收藏
-
Golang · Go问答 | 2个月前 | 配置 · 设计模式 · 架构 · Go问答 · 代码重构 · Go 默认值 配置参数 参数校验 构造函数 option Functional OptionsGo 的构造函数参数从 3 个长到 8 个后,直接继续加位置参数会让调用点难读也难兼容。Functional Options 能把可选配置变成具名、可组合的设置项,但它不适合承载必填依赖或运行期变更。本文给出最小实现、交叉校验和选择清单。100 收藏