Go问答技术文章
-
Go 中自定义 RoundTripper 时,不要用空的 http.Transport 替换默认传输层。本文说明如何通过类型断言和 Clone 保留 ProxyFromEnvironment、连接复用与响应体边界。401 收藏 -
Go http.Transport 设置 DisableKeepAlives 后吞吐下降,通常是连接复用被关闭,重复承担建连、TLS 握手和连接调度成本。本文解释它与 TCP keepalive 的区别,并给出复用、限额和清理空闲连接的配置取舍。350 收藏 -
讲清 Go http.Transport 的 IdleConnTimeout 如何按 keep-alive 空闲时长回收连接,并区分连接数量、响应头等待、请求总超时和主动清理。396 收藏 -
Go 服务端 Handler 通常不需要手动关闭 http.Request.Body,HTTP Server 会在请求结束时负责收尾;真正必须由调用方关闭的是客户端 Response.Body。本文按生命周期拆开这两个容易混淆的责任边界。387 收藏 -
Go 的 http.Request.GetBody 不是所有请求都会自动生成,只有客户端 NewRequest 识别的标准 reader 才会填充。本文区分客户端与服务端边界,并给出自定义 Body 的安全重放写法。212 收藏 -
Go 服务端中间件读取 http.Request Body 后,下游为什么只能拿到空内容?关键在于 Body 是一次性读取流,读取后要用缓存字节重建 Request.Body,并同时控制请求体大小与错误分支。484 收藏 -
Go 的 embed 在编译期读取资源;交叉编译不会自动改写同一文件,平台差异应通过构建约束选择不同源文件。168 收藏 -
交叉编译后不要只看构建机上的 GOOS 和 GOARCH。本文用 go env、文件格式、go version -m 和 build ID 四层证据,确认最终二进制实际面向的操作系统与 CPU 架构。396 收藏 -
设置 GOOS 和 GOARCH 只改变 Go 的目标平台,不会自动提供目标平台的 C 编译器、头文件和库。本文按 cgo 开关、CC 工具链、编译与链接错误四层排查交叉构建失败。351 收藏 -
用 *_test.go 保存普通测试,用 integration 或 e2e 标签隔离数据库、消息队列和外部服务测试;本文说明标签写法、默认命令、集成命令与 go list 排查方法。262 收藏 -
迁移 Go 构建约束时,//go:build 与 // +build 必须表达同一条件;理解空格、逗号和多行的逻辑,再用 gofmt、go vet 和跨平台构建检查结果。496 收藏 -
Go build tags 同时写平台和自定义条件时,文件未被选中通常不是 go build 失效,而是 &&、||、-tags 传值或文件名隐式约束叠加后的结果。本文用 go list 逐层排查。386 收藏 -
只读构建环境中,-mod=vendor 才是强制使用 vendor 的开关;-mod=readonly 只是不允许修改 go.mod。本文区分三种模式、GOPROXY=off 与 vendor/modules.txt 一致性,并给出适合 CI 的固定配置。177 收藏 -
修改 go.mod、go get 或 replace 后,vendor/modules.txt 可能与模块图失配。本文按单模块、工作区、替换依赖三个边界说明如何重建 vendor 并用 vendor 模式复查。456 收藏 -
Go modules 使用 vendor 并不等于所有命令都离线。本文区分 go build、go test 与 go mod tidy、go mod vendor、go get 的依赖访问边界,说明 vendor/modules.txt、GOFLAGS 和 CI 策略如何影响网络请求。316 收藏