Go语言技术文章
-
Go 的 json.Unmarshal 复用结构体时,JSON 缺失字段不会自动清零,旧指针可能因此残留。本文用最小示例区分缺失、null 与对象合并,并给出安全处理方式。404 收藏 -
介绍 Go testing.T Cleanup 的登记方式、后进先出顺序、父子测试作用域和并行测试中的资源清理边界。127 收藏 -
Go 的 ResponseWriter 会在首个 Write 或 WriteHeader 时提交响应头,之后再修改 Header 或状态码通常不会生效。本文用 ServeHTTP 示例说明正确顺序、错误分支和特殊边界。107 收藏 -
Go database/sql 事务中,业务语句失败、Rollback 失败和 Commit 失败对应不同的处理边界。本文用一段可复用代码说明如何保留原始错误、避免重复回滚,并解释提交失败后为什么要先按幂等键核对状态。123 收藏 -
Go 的 http.Server.Shutdown 返回错误时,不能只看 err != nil。本文区分 Shutdown、Serve 与 context 的错误语义,用 errors.Is 判断超时,并给出活动请求、长连接和强制退出的处理清单。372 收藏 -
sql.Named 能保留参数的业务名称,但不会替不同驱动改写 SQL 占位符。本文用 database/sql、MySQL、PostgreSQL 和 pgx 的边界说明命名参数如何落地,避免把参数语义和占位符语法混为一谈。479 收藏 -
Go 的 Response.Body 只 Close 不读到 EOF 时,HTTP/1.x 连接可能无法复用。本文按响应大小给出读取、关闭和排查 Transport 的实用写法。301 收藏 -
用 Go database/sql 的 sql.NullString 处理可空文本,区分 SQL NULL 与空字符串,并覆盖单行读取、多行扫描和写回数据库。229 收藏 -
Go 的 CheckRedirect 返回普通错误时,上一跳 Response 可能仍然返回,但 Body 已被关闭。本文解释如何使用 ErrUseLastResponse 保留响应并安全读取正文。331 收藏 -
Go html/template 会按 HTML、属性和 URL 上下文自动转义用户值。本文用固定属性模板说明 title、data-*、href 的安全写法,解释危险协议、事件属性和 template.HTML 的信任边界。383 收藏 -
Go http.NewRequest 传入 nil Body 后 ContentLength 为零是正常语义:nil 表示没有请求体,零值不能单独证明 Body 一定为空。本文对比 nil、http.NoBody、已知长度 Reader 和未知 Reader 的边界。238 收藏 -
Go 1.22 起,http.ServeMux 支持在同一模式中注册 HTTP 方法、路径和通配符。本文用用户接口示例说明 PathValue、最具体匹配、冲突 panic、405 以及旧项目兼容边界。487 收藏 -
Go httptest.NewRecorder 的 Code 并不是创建时就固定为 200。本文区分显式 WriteHeader、写正文触发的隐式 200 和完全不写响应的 0,并说明为什么应使用 Result().StatusCode 断言最终 HTTP 状态。280 收藏 -
Go 的 http.Cookie.MaxAge 设为负数会生成立即删除语义,但删除是否生效还取决于 Name、Path、Domain 是否与原 Cookie 一致。本文用响应头、代码和排查表说明 MaxAge 三种取值。217 收藏 -
Go time.ParseDuration 解析小时分钟混合值失败,通常不是小时和分钟不能组合,而是输入使用了 min、中文单位或内部空格。本文说明合法格式、错误边界与外部输入处理方式。459 收藏