Skip to content
Opensource internals
  • Posts

Go

Go's Error Wrapping: %w, errors.Is and a Tree of Causes

Oct 21, 2026 19 min read Jay Hubbert

Wrapping is two optional methods, Unwrap and Is; fmt.Errorf with %w builds a *wrapError, errors.Is and errors.As walk the resulting tree, and errors.Join turns it into a branching …

GoInternalsErrorsIdiomatic goStdlib

Read more →

Go's Execution Tracer: A Ring Buffer of Events Per Goroutine

Oct 21, 2026 18 min read Jay Hubbert

Unlike pprof, the execution tracer records every event: goroutine starts, stops, blocks, syscalls and GC phases are batched per M, deduplicated through lock-free hash tries, and …

GoInternalsTracingProfilingScheduling

Read more →

Go's Experimental SIMD Package: Vector Registers Without Assembly

Oct 21, 2026 16 min read Jay Hubbert

Go’s SIMD package exposes portable vector types that the compiler lowers to AVX or NEON instructions, with a source-to-source rewrite pass that specialises code for the vector …

GoInternalsSimdCompilerPerformance

Read more →

Go's Generics: Dictionary Passing, Shape Stenciling and GC Shape

Oct 21, 2026 18 min read Jay Hubbert

Generic code is shared per shape, the concrete types arrive in a flat dictionary of machine words, and the shape’s layout is what makes the sharing safe.

GoInternalsGenericsCompilerRuntime

Read more →

Go's Green Tea GC: Marking Whole Spans Instead of Objects

Oct 21, 2026 19 min read Jay Hubbert

Green Tea keeps two bitsets per span (marks and scans), queues whole spans on a FIFO queue, and scans an entire span’s marked objects in one pass.

GoInternalsGarbage collectionGreen teaPerformance

Read more →

← Newer Page 3 of 12 Older →

© 2026 Jay Hubbert · Built with Hugo 0.168.0

RSS ·