Go问答技术文章
-
Golang · Go问答 | 1个月前 | 命令行 · flag · 错误处理 · 工程实践 · Go问答 · Go Parse 命令行参数 参数解析 flag.FlagSet ContinueOnError
flag.FlagSet 的 Parse 失败并不等于整个对象回到初始状态。本文用 ContinueOnError 拆开 parsed、已写入的默认值、剩余参数和二次 Parse 的边界,说明什么时候应该新建 FlagSet,什么时候可以在测试或子命令场景复用。270 收藏 -
QueryContext 超时并不自动等于连接损坏。本文从 QueryContext、Rows、驱动取消接口和 ErrBadConn 四层判断连接是否还能安全回到连接池。270 收藏 -
runtime.KeepAlive 不是“调用前保活”开关,而是把对象的可达性保证到它所在的位置。本文用系统调用示例说明放错位置为何仍可能提前回收,以及如何把保护边界放在真正的调用之后。270 收藏 -
Go HTTP 中间件重复写响应头,通常是前一层已提交错误响应却仍调用后续处理器。本文从提交边界、调用链、临时探针和响应所有权测试逐层定位。270 收藏 -
同一个模块在两台机器上的依赖下载或交叉编译结果不一致时,go env -changed 能快速列出有效值偏离默认值的环境设置。本文把 GOENV、go env -w 与 shell 环境拆开,给出可复现的检查顺序。269 收藏 -
用 Go crypto/rand.Int 生成安全随机下标时,上界必须是正数且结果不包含上界;文章用最小代码说明无偏分布、big.Int 转换和 Reader 错误处理边界。269 收藏 -
Go map 读取不存在的键不会报错,而是返回元素类型的零值。本文用 comma-ok 语法区分键不存在与真实零值,并说明 nil map 的读取和写入边界。269 收藏 -
panicreturn 不是 Go 内置函数名。遇到 panic 后 recover 为空、程序继续崩溃或 error 没有返回时,应从同一 goroutine、defer 直接调用和命名返回值三个位置排查。269 收藏 -
解释 Go sql.Conn.Raw 中 driverConn 的借用生命周期,说明为什么不能跨回调保存底层驱动连接,并给出同步调用、结果复制与 ErrBadConn 处理的安全模板。269 收藏 -
Golang · Go问答 | 2个月前 | 并发 · channel · Mutex · 性能优化 · Go问答 · Goroutine channel Mutex 并发性能 锁等待 benchmark Go问答
Go 里 Mutex 和 channel 不是谁绝对更快。保护一个共享变量时,Mutex 往往更直接;交接任务、串联 worker、表达所有权转移时,channel 更自然。判断时别只盯 ns/op,要看临界区、队列等待和业务动作。268 收藏 -
Go 的 http.Client 遇到 301、302 或 307 时,不会无条件把原请求头复制到新地址。本文从一次鉴权失效现场出发,验证 CheckRedirect、Authorization、Cookie 和跨主机跳转的行为,并给出安全可控的处理方式。268 收藏 -
Golang · Go问答 | 1个月前 | JSON · go · 数据校验 · 错误排查 · JSON Go encoding/json 嵌套对象 DisallowUnknownFields Decoder 字段校验
DisallowUnknownFields 只会在目标是结构体时拒绝未知键,嵌套结构体仍会继续校验,但 map、interface 和自定义 UnmarshalJSON 会改变边界。通过一个可运行的配置解码例子,可以看清错误出现的位置以及如何补上严格校验。268 收藏 -
go test 输出 (cached) 时,-count=1 只绕过当前调用的测试结果缓存;go clean -testcache 会让已有测试结果全部失效,但不会清空构建缓存。本文按排查范围说明两者区别,以及如何用 -v 和 GODEBUG 判断是否真正重跑。268 收藏 -
Golang · Go问答 | 3星期前 | 性能排查 · HTTP客户端 · Go问答 · MaxIdleConnsPerHost Go连接池 Go transport http.Transport连接复用 HTTP keep-alive
Go http.Transport 默认会缓存连接供后续请求复用,但前提是 Transport 长期复用、响应体正确收尾,并按上游数量配置空闲连接。本文给出 Client、Transport、Body 和 httptrace 的判断方法。268 收藏 -
本文解释 atomic.Value 首次写入如何固定具体类型,分析值与指针、接口动态类型、nil 写入导致 panic 的原因,并给出稳定包装类型的安全方案。268 收藏