编程 Go 1.28 把 http_proxy 小写放到优先位:代理配了不生效的排查与 net/url 新变化

2026-09-28 21:01:47

Go 1.28 的 net/url 与 net/http:小写代理变量优先、MustParse 出错 panic、IP 类型将支持 JSON 可读格式

来源:Go next release notes(Go 1.28 draft)。

net/http:ProxyFromEnvironment 改为小写代理变量优先

ProxyFromEnvironment 现在当 http_proxy、https_proxy、no_proxy 的大小写两套环境变量同时存在且值不同时,优先取小写版本,而不是以前的大写优先。该变化也会通过 DefaultTransport 和 DefaultClient 影响默认代理查找。

升级后如果请求走了不同代理,先确认两套变量是否同时存在:

env | grep -iE '^(http_proxy|https_proxy|no_proxy)='

若 http_proxy 与 HTTP_PROXY、https_proxy 与 HTTPS_PROXY、no_proxy 与 NO_PROXY 的值不同,Go 1.28 下小写生效。需要统一值或删除不期望的一套。

net/url:新增 MustParse

新增 MustParse,返回解析后的 URL,出错则 panic,可简化常见 Parse 用法,例如用合法 URL 字符串常量初始化变量。

var u = url.MustParse("https://example.com")

运行时用户输入不要走 MustParse,错误输入会直接 panic。适合包级变量、测试或已知合法的常量 URL。

net:IPMask、IPNet、HardwareAddr 新增 encoding.TextUnmarshaler

IPMask、IPNet、HardwareAddr 各自新增 encoding.TextUnmarshaler 方法。该方法会识别这些类型当前的 marshaling 格式,以及计划中的未来格式;未来格式是 JSON 可读的,不同于当前 base64 编码。未来格式将在后续 Go 版本成为默认。这是两步走,以便本版本生成的 JSON 仍能被更早版本读取。

跨版本传输 JSON 时,本版本的解析端会同时接受当前格式和未来格式;本版本生成的 JSON 仍可被更早版本读取。后续 Go 版本把未来格式切为默认后,旧版本读取新 JSON 需要关注。

其他 Go 1.28 变化

  • go 命令现在识别已被移除支持的 GODEBUG 设置,如 asynctimerchan;若出现在 go.mod 的 godebug 条目或 .go 源文件的 //go:debug 注释里,只接受设为最终默认值的设置,设为旧值则 go 命令失败。
  • Linux 上 SysProcAttr 支持对新建子进程强制 Landlock 策略与 PR_SET_NO_NEW_PRIVS 标志。
  • 新增 Subtest 便捷函数,组合 testing.(*T).Run 与 testing/synctest.Test。
  • go/types:ResolveFile 做旧式语法标识符解析,已弃用,新应用应使用 go/types。
  • encoding:EncodedLen 在编码长度溢出 int 时 panic,而不再返回负数。
  • vet 新增 scannererr / sqlrowserr analyzer,检查循环里未处理 bufio.Scanner.Scan / sql.Rows.Next 的错误。
  • Go 1.28 要求引导用 Go 1.26.0 或更高。
复制全文 生成海报 Go net url http_proxy GODEBUG 标准库

推荐文章

程序员茄子在线接单