103 wires and counting

$ follow Go

Keep up with Go in about 3 minutes: what actually shipped — the commits, pull requests, releases, and security advisories that matter.

or

fair warning: these emails are deeply technical. diffs, version numbers, CVEs, benchmark deltas. if that's not your idea of a good read, this isn't your newsletter.

Folds into your digest — weekly by default, monthly if you prefer. Unsubscribe in one click.

$ status

wire 2026-09-04
stories 12

© 2026 RepoJournal Home Showcase Explore How it works Privacy

$ the-wire · showcase

Plugin itabs double-inserted; symbol insertion skips large modules

By RepoJournal · Filed · About Go

A runtime fix stops duplicate interface method table entries for plugins, while pkgsite skips symbol insertion for modules over 30,000 symbols to prevent timeout.

The runtime no longer adds a plugin's itabs twice [1]. A previous change removed itablinks and made the runtime walk the itab section of a module at start and on plugin load. A plugin carries its own copies of itabs that the main program also has; they were previously deduplicated by dynamic symbol resolution, but now add puts them in as second entries for the same interface/type pairs. This corrupts type switch behavior in plugins. The fix prevents the duplicate entries.

pkgsite wins two related changes against symbol insertion timeouts [2][3]. Module versions whose total symbol count exceeds maxSymbols (30,000) now skip symbol insertion entirely, with the standard library and golang.org/x packages exempt. A separate change adds the worst offenders to the skipSymbols list and introduces prefix matching for repos that repeatedly publish major versions with lots of generated code. The description notes "several large repos are causing symbol insertion operations to timeout [2]" and the threshold is meant "to prevent database statement timeouts on large or generated modules."

go/ssa now distinguishes goto from continue when a label targets a range-over-func statement [4]. Previously both mapped to the yield continuation; goto must instead stop the current iterator call and resume at the parent function's label so the range statement restarts. A separate go/ssa change fixes a memory leak in the isParameterized check by canonicalizing selection types, since sel.Type() allocates a fresh Signature on every call and isParameterized memoizes by type identity in a never-cleared map [5]. Type switches on plugin-provided types will now resolve correctly.

net/http's HTTP/2 server no longer shrinks its HPACK decoder table before the client acknowledges the SETTINGS frame [6]. A server configured with MaxDecoderHeaderTableSize below the default 4096 bytes applied it at connection start, but RFC 7540 requires waiting for the client's ack before changing table size. Applying the smaller size early could desynchronize the HPACK state and cause decoding errors.

Action items

References

  1. [1] runtime: don't add the itabs of a plugin twice ↗ golang/go
  2. [2] internal/postgres: skip modules for symbol insertion ↗ golang/pkgsite
  3. [3] internal/postgres: skip symbol insertion for modules exceeding threshold ↗ golang/pkgsite
  4. [4] go/ssa: distinguish goto from continue for range-over-func ↗ golang/tools
  5. [5] go/ssa: canonicalize selection types before the isParameterized check ↗ golang/tools
  6. [6] net/http/internal/http2: don't shrink HPACK decoder table before SETTINGS ack ↗ golang/go

Quick answers

What shipped in Go on September 4, 2026?
A runtime fix stops duplicate interface method table entries for plugins, while pkgsite skips symbol insertion for modules over 30,000 symbols to prevent timeout. In total, 12 commits landed.
Who contributed to Go on September 4, 2026?
8 developers shipped this update, including Ethan Lee, Peter Weinberger, Li Jie, hw, Davanum Srinivas, Junyang Shao, Mark Freeman, and Brad Fitzpatrick.
What were the notable Go updates?
runtime: don't add the itabs of a plugin twice, internal/postgres: skip modules for symbol insertion, and internal/postgres: skip symbol insertion for modules exceeding threshold.