Go语言技术文章
-
Golang · Go问答 | 1天前 | 错误处理 · go · SQL · database/sql · 线上排查 · SCAN 查询结果 database/sql Go问答 rows.Next Rows.Err
Go 读取数据库结果时,rows.Next 返回 false 只能说明当前结果集没有下一行,不能直接当成查询成功。需要在循环后检查 rows.Err,并分别处理 QueryContext、Scan、Close 的错误,才能区分正常查完、数据库中断和结果读取失败。292 收藏 -
Golang · Go问答 | 2星期前 | 并发 · map · RWMutex · sync.Map · Go问答 · 数据竞争 RWMutex sync.Map map并发读写 Go问答 concurrent map read and map write
Go 原生 map 不是并发安全容器,只要一个 goroutine 写 map,同时另一个 goroutine 读或写同一个 map,就可能触发 concurrent map read and map write。生产代码要按访问模式选择 RWMutex、单协程归口或 sync.Map。291 收藏 -
Golang · Go问答 | 1星期前 | 依赖管理 · golang · 私有仓库 · 工程实践 · Go Modules · GOPROXY GOPRIVATE GONOPROXY GONOSUMDB Go私有模块 go mod download
Go 拉取私有模块时,报错往往不是凭据本身失效,而是模块路径先被公共代理或公共校验服务请求。先用 GOPRIVATE 标记私有路径,再按公司是否部署私有代理决定 GONOPROXY 与 GONOSUMDB 的边界,最后用 go env 和 go mod download 收敛问题。288 收藏 -
JWT 的 exp 只回答令牌是否过期,不能证明内容可信。本文用 Go 和 golang-jwt/jwt 走一遍验证顺序:先限制签名算法,再校验签名、issuer、audience 与时间字段,最后用可测试的时钟偏差和失败日志收口。286 收藏 -
并发处理一批任务时只返回第一个错误,往往会掩盖其他失败项。本文用 Go errors.Join 组合多个错误,比较首错、聚合错误和带任务标识的结果汇总,给出可验证的选择边界。278 收藏 -
Golang · Go问答 | 1星期前 | 并发 · golang · go · 循环变量 · Go 1.22 · 模块升级 · Goroutine 闭包 循环变量 go.mod Go 1.22 loopvar 升级迁移
Go 1.22 将 for 循环声明的变量改为每次迭代独立,但新语义是否生效取决于模块 go.mod 的 go 版本:只有声明 go 1.22 或更高版本的模块会启用。升级时应重点复查 goroutine、闭包和 t.Parallel 子测试;旧版模块中的变量拷贝仍可能是必要保护,不能只因编译器升级就批量删除。277 收藏 -
Go 转存远端文件时,io.ReadAll 适合小而且必须整体检查的内容;未知大小或大文件应使用 io.Copy 保持流式写入。本文用大小上限、临时文件、SHA-256 和长度核对给出可直接落地的选择方法。276 收藏 -
Golang · Go教程 | 2星期前 | 跨域 · cors · options · Go教程 · net/http · 跨域 Access-Control-Allow-Origin 预检请求 Options Go教程 Go CORS
Go 接口被浏览器拦跨域时,不是简单加一个星号就完事。本文从浏览器 CORS 预检请求讲起,用 net/http 写一个可控的跨域中间件,说明 Origin 白名单、OPTIONS 响应、请求头放行和安全注意点。275 收藏 -
Golang · Go问答 | 3天前 | go · 文件上传 · 安全 · net/http · 接口设计 · multipart/form-data ParseMultipartForm http.MaxBytesReader Go文件上传 请求体大小限制
Go 文件上传接口不能只依赖 ParseMultipartForm 的参数,否则超大请求仍可能先进入内存或临时文件。本文从 net/http 服务端入口开始,演示 MaxBytesReader、ParseMultipartForm 和文件级校验的组合边界,并给出超限回归检查。275 收藏 -
Golang · Go教程 | 2星期前 | Go教程 · HMAC · API安全 · 接口签名 · 防重放 · timestamp Go 中间件 API安全 HMAC 接口签名 nonce 防重放
Go 接口签名不只是把参数算个 HMAC,还要把 timestamp、nonce、密钥保管、权限收窄和审计日志连起来。文章用一个可落地的中间件示例讲清防重放校验链路和常见坑。273 收藏 -
Golang · Go问答 | 1天前 | net/http · Go问答 · HTTP重试 · 请求体 · 接口稳定性 · net/http Go HTTP重试 Request.GetBody Request.Clone 请求体复用
Go HTTP 客户端第一次请求失败后直接重用同一个 Request,第二次可能只剩空请求体。问题不在重试次数,而在 Body 已经被消费;用 Request.GetBody 构造可重放副本,配合 Request.Clone 处理上下文和 Header,才能把重试边界写清。273 收藏 -
Go 服务需要在不重启进程的情况下临时关闭一条新逻辑时,atomic.Bool 可以提供轻量的并发开关。本文用运行时功能开关示例说明 Load、Store、启动默认值、灰度比例和回滚检查该怎么组织,避免数据竞争与状态不一致。270 收藏 -
Golang · Go问答 | 3星期前 | 中间件 · Context · Go问答 · 架构模式 · 代码边界 · 中间件 context Context.Value Go问答 WithValue 请求作用域 业务参数
Go context 可以放用户 ID、traceID 这类请求作用域值,但不适合替代函数参数。本文用中间件、Service 和 Repository 的边界示例说明怎么判断。269 收藏 -
Golang · Go问答 | 2星期前 | 并发 · channel · Mutex · 性能优化 · Go问答 · benchmark · Goroutine channel Mutex 并发性能 锁等待 benchmark Go问答
Go 里 Mutex 和 channel 不是谁绝对更快。保护一个共享变量时,Mutex 往往更直接;交接任务、串联 worker、表达所有权转移时,channel 更自然。判断时别只盯 ns/op,要看临界区、队列等待和业务动作。268 收藏 -
Golang · Go问答 | 1天前 | go · 安全 · net/http · HTTP重定向 · 请求头 · 请求头 Authorization 安全边界 CheckRedirect Go HTTP重定向
Go 的 http.Client 遇到 301、302 或 307 时,不会无条件把原请求头复制到新地址。本文从一次鉴权失效现场出发,验证 CheckRedirect、Authorization、Cookie 和跨主机跳转的行为,并给出安全可控的处理方式。268 收藏