Go问答技术文章
-
Go embed 遇到多个目录中的同名文件时,通常不是文件名本身冲突,而是嵌入路径和变量类型用错。本文用 embed.FS、完整路径和构建清单说明如何稳定处理。187 收藏 -
fs.Sub 不会改写原始 embed.FS,也不会修改 HTTP 路由。本文区分嵌入路径、子文件系统相对路径和 URL 前缀,解决读取与遍历时目录前缀重复的问题。430 收藏 -
Go embed 使用目录模式时会默认跳过名称以点号或下划线开头的文件。本文对比 assets、assets/* 与 all:assets 的匹配边界,并给出 embed.FS 读取、构建检查和安全排查方法。259 收藏 -
go generate 找不到生成器时,问题通常是 GOBIN 没进入 PATH。本文比较 Go 1.24+ 的 tool/go tool、仓库相对路径和带版本 go run,给出本机与 CI 都能复现的固定方式。411 收藏 -
解释 Go generate 环境变量替换与参数边界的关系,说明带空格值、多个独立参数、字面美元符号和空变量的可靠写法。417 收藏 -
Go generate 执行指令时,生成器的工作目录是包含该指令的包源目录,而不是你启动 go 命令的仓库根目录。理解这个基准后,就能稳定处理 schema、模板、输出文件和仓库级生成器的相对路径。264 收藏 -
Golang · Go问答 | 3星期前 | 超时控制 · HTTP客户端 · Go问答 · context.WithTimeout http.Client.Timeout Go httptest.Server.Client Go HTTP测试超时 httptest慢请求
使用 Go httptest.Server 做接口测试时,可以保留 Server.Client 的测试连接配置,再在首次请求前设置 http.Client.Timeout;需要单请求预算时,用 context.WithTimeout 控制并检查超时错误。180 收藏 -
Go 的 httptest.ResponseRecorder.Code 为 0 不一定代表接口返回了 0。处理器没有显式写状态或响应体时,应在执行结束后调用 Result().StatusCode 读取隐含的 200,并理解 Code、HeaderMap 与 Result 的边界。300 收藏 -
解释 Go httptest.NewTLSServer 与默认 Transport 的证书信任差异,给出使用 ts.Client() 以及克隆测试 Transport 的正确写法。175 收藏 -
Go HTTP 服务收到 SIGTERM 后,用 NotifyContext 接管信号,再以带截止时间的 Server.Shutdown 停止监听并等待活动请求完成。222 收藏 -
Go os/signal.Notify 向 channel 发送时不会阻塞,缓冲已满的通知可能被丢弃。本文按退出信号、多个信号和慢消费者三类场景说明容量选择、消费循环、NotifyContext 与可靠状态记录。190 收藏 -
signal.NotifyContext 返回的 stop 不只是结束 context,它还会注销信号接管并释放关联资源。本文用优雅退出、重复测试和短生命周期任务说明 stop 的调用时机与边界。282 收藏 -
Go encoding/gob 解码到已有结构体时不会先清空目标,流中缺少的字段和发送端被省略的零值字段可能继续保留旧内容。本文用最小示例说明字段合并语义,并比较复用目标、解码到新变量和存在性字段三种处理方式。319 收藏 -
Go encoding/gob 传输接口值时需要注册实际承载的具体类型。本文用 Shape 和 Circle 拆解静态类型、动态类型与流中类型名的关系,给出值和指针注册边界、跨进程初始化方式,以及用错误数、分配次数和消息大小验证修复的方法。454 收藏 -
Go encoding/gob 不会传输 nil 指针,但当流中存在指针字段时,Decoder 会为 nil 目标字段分配对象。本文用 Envelope 示例拆开这层语义,并给出 HasMeta 加值字段的传输结构,避免把隐式分配误当成业务状态。169 收藏