Go问答技术文章
-
Go encoding/json 默认会忽略结构体中没有对应字段的 JSON key。本文说明 Decoder 的未知字段边界、结构体匹配规则,以及如何用 DisallowUnknownFields 显式启用严格解析。394 收藏 -
Golang · Go问答 | 1星期前 | 标准库 · go · database/sql · Go database/sql driver.ErrSkip NamedValueChecker DefaultParameterConverter ColumnConverter
Go 数据库驱动的 NamedValueChecker 不必覆盖所有参数类型。本文说明 driver.ErrSkip 如何把未处理类型交给 ColumnConverter 或 DefaultParameterConverter,并区分普通转换错误与 ErrRemoveArgument,帮助定位参数类型和数量问题。394 收藏 -
解释工作区模式下 go.work replace 覆盖成员模块 go.mod replace 的原因,演示如何确认 GOWORK、匹配规则和最终模块来源,并给出可回滚的修复方法。394 收藏 -
Go 的 OpenFile 和 Create 传入的是创建前权限,Unix umask 还会屏蔽其中一部分位,因此最终权限可能比参数小。本文说明 perm、umask 与最终模式的关系,并给出不污染进程全局状态的处理方式。394 收藏 -
Go database/sql 的 ColumnType.Nullable 返回 nullable 和 ok 两个值。本文解释驱动不支持时为什么不能把 false 当成不可空,并给出跨数据库代码保存 unknown、按需做方言适配的兼容写法。394 收藏 -
用 Go 的 filepath.Clean、Join 和 Rel 处理用户提供的相对路径,说明 Clean 只能做词法归一化,并给出安全根目录边界判断的完整写法。393 收藏 -
Go httptrace.WroteRequest 回调中的 Err 只描述请求写入阶段,不能单独证明服务端是否收到或处理了请求。本文用阶段化 trace、主流程错误和幂等重试边界,说明如何判断请求状态。393 收藏 -
Go io.Copy 返回的写入长度与源文件大小不一致时,问题通常出在 Reader 范围、读取游标、目标文件尾部或字节与字符的单位差异。本文给出一套可执行的排查顺序,并说明已知长度时如何使用 io.CopyN。393 收藏 -
解释 Go Paho MQTT 的 WaitTimeout、Done 和 Error 如何协作,说明返回 false 只是等待超时而不是取消请求,并给出 WaitTokenTimeout 与业务取消的处理方式。393 收藏 -
Golang · Go问答 | 5天前 | go · Context · 服务端 · net/http · Go http.server context.Context 请求上下文 BaseContext ConnContext
Go http.Server.BaseContext 用于为一个监听器接收的请求提供统一根 context,默认是 context.Background()。本文用最小示例说明它与 ConnContext、Request.Context 的区别,以及取消、返回 nil 和多监听器场景的边界。393 收藏 -
HostLayout 约束的是 Go 结构体在当前主机上的内存布局,不是跨平台、跨进程或长期存储的字节协议。本文从一个布局误用场景拆解原因,并用 encoding/binary 演示如何显式指定字段宽度与字节序。393 收藏 -
sync.Map.Range 能遍历当前可见的键值,但它不提供一致性快照。本文用并发缓存盘点示例说明 Store、Delete 与 Range 的可见性边界,并给出锁、版本号和独立快照三种更可靠的判断方式。392 收藏 -
Go bufio.Scanner 默认按行返回文本,空行会返回空字符串。本文用一个可复用的段落聚合流程处理普通行、连续空行、EOF 和读取错误,并说明严格空行与空白行的区别。392 收藏 -
Golang · Go问答 | 2星期前 | CGO · 内存管理 · Go问答 · 排错 · Go Go指针 CGO runtime/cgo.Handle C指针 runtime.Pinner cgocheck
Go cgo 指针检查的关键不是把 unsafe.Pointer 换成别的类型,而是确认内存归属、内部是否含 Go 指针以及 C 保存地址的时长。本文对比临时借用、C 内存复制、runtime/cgo.Handle 和 runtime.Pinner 的适用边界。392 收藏 -
Go 1.22 改变了 for 循环变量的创建方式,但循环外变量、旧模块和延迟回调仍可能共享同一个值。本文说明闭包捕获边界,并给出显式传值和当前值副本的稳妥写法。392 收藏