Go问答技术文章
-
本文用 database/sql 的查询函数示例说明 rowslife 的工程化含义:如何限定 Rows 的所有权、关闭时机、Next/Scan/Err 判断和 Context 取消边界,避免半消费结果集泄漏到业务层。378 收藏 -
Go time.After 适合做一次等待的超时分支,但固定时长不能自动代表整轮任务的截止时间。本文用绝对 deadline 和 time.Until 计算剩余预算,说明如何在 select 中同时处理结果、取消与超时。377 收藏 -
Go sync.Cond Broadcast 唤醒所有等待者,但不保证条件仍然成立。本文用任务队列说明如何用同一把锁保护状态、用 for 循环检查条件,并排查看似丢失唤醒的问题。377 收藏 -
Go 程序在精简容器中调用 time.LoadLocation 报 unknown time zone,通常是镜像没有 IANA 时区数据。本文按查找顺序解释根因,并比较安装 tzdata、嵌入 time/tzdata 与显式加载数据的取舍。375 收藏 -
Go 并行子测试要在各自的回调里调用 testing.T.TempDir,让每个用例获得独立且自动清理的目录;父测试提前创建目录再传递会造成共享写入。本文说明目录隔离、并行等待、清理边界和排查清单。375 收藏 -
本文从 go/types.Info.InitOrder 出发,说明 Go 如何整理包级变量初始化项,并用 AST 与类型检查代码读取 Lhs、Rhs,区分 init 函数、跨包顺序和隐藏依赖。374 收藏 -
Go 的 JSON 结构体解码默认会忽略未知字段。本文用 json.Decoder 的 DisallowUnknownFields 配置严格检查,并说明兼容旧客户端、区分类型错误与未知字段错误的落地方法。373 收藏 -
Go 字符串按字节截断后出现替换符,通常是切进了 UTF-8 多字节序列。本文解释 U+FFFD 的来源,并分别给出安全字节截断、rune 截断和更高层字符边界的判断方法。372 收藏 -
Go select 中 default 被选中通常不是分支抢先,而是其他通信 case 当下都无法立即完成。本文按 nil 通道、缓冲状态、发送接收配对和循环忙轮询逐层排查,并给出可落地的修正方式。370 收藏 -
讲清 Go template.ParseFS 如何按 embed.FS 的正斜杠路径使用通配符,说明多级模板目录的组织、** 误区与 ExecuteTemplate 的稳定入口写法。369 收藏 -
Golang · Go问答 | 3天前 | 依赖管理 · go · module · go mod download Go module retract Go 模块撤回 Go 依赖版本缓存 go list -retracted
Go module 的 retract 只改变自动版本选择,不会把已发布版本从代理或本地缓存抹掉。本文用 go list、go mod download 和 GOMODCACHE 排查撤回版本仍能下载的原因,并给出升级、保留和清理三种处理边界。368 收藏 -
Go 模板调用自定义函数时,FuncMap 必须先于 Parse 注册。本文用最小示例解释解析期名称检查、执行期函数替换和常见排错边界。367 收藏 -
Go 1.21 起,主模块 go.mod 的 go 行不能低于依赖模块的 go 行。本文区分自动工具链切换、直接失败与依赖回退,给出 go.mod、GOTOOLCHAIN 和 go.work 的排查与修复清单。367 收藏 -
Go os.OpenFile 的 perm 不是最终权限。本文用 umask、stat、UID/GID 和挂载状态拆解容器中权限看似失效的原因,并给出最小权限修复方法。366 收藏 -
Go pprof profile 为空时,先区分采样窗口、目标负载、阻塞与互斥采样开关,以及 StopCPUProfile 和 Writer 写入边界,再选择正确的修复动作。364 收藏