DEVELOPER NEWS STREAM
Direct logs, engine updates, and framework notifications parsed from curated RSS feeds and announcements, updated hourly.

Tran Long AnYour Go struct already describes your API. Let it write the docs too.
Your Go struct already describes your API. Let it write the docs too. If you build HTTP...

Gabriel Anhaiahtml/template in Go: The Auto-Escaping That Stops XSS (When You Let It)
Go's html/template escapes XSS for you based on context. Here's how string concatenation and template.HTML quietly turn it off.

Gabriel Anhaiabufio.Scanner in Go: The Default Buffer Limit That Truncates Your Lines
bufio.Scanner silently caps lines at 64KB and stops. Here is why it happens, how Buffer() lifts the ceiling, and when to drop Scanner for Reader.

Gabriel Anhaiadatabase/sql in Go: NullString, Contexts, and Connection Lifecycle
The three database/sql habits that separate a Go service that survives a traffic spike from one that pools out: sql.Null types, QueryContext, and pool tuning.

Gabriel Anhaiatime.Ticker and time.Timer in Go: The Reset and Leak Traps
Stop your tickers, stop leaking time.After in loops, and learn why Go 1.23 quietly deleted the drain-before-Reset dance.

Gabriel AnhaiaCustom JSON in Go: Marshaler, Unmarshaler, and the omitempty Traps
MarshalJSON, UnmarshalJSON, and the omitempty rules that surprise Go developers: zero values, nested structs, and the pointer-vs-value call.

Gabriel AnhaiaGo's time Package: Monotonic Clocks and the Bugs They Prevent
How Go's monotonic clock makes Sub immune to NTP jumps, why marshaling silently strips it, and the timing bugs that follow.

Gabriel Anhaiajson.RawMessage in Go: Deferring Decode Until You Know the Type
Decode polymorphic JSON in Go without interface{} soup. Read a discriminator field first, then unmarshal the payload into the right struct.

Gabriel Anhaiaio.Pipe, io.TeeReader, io.LimitReader: Go Stream Composition Toolkit
Three tiny io helpers that let Go stream, hash, and cap payloads without ever buffering the whole thing in memory.

Gabriel AnhaiaBuffered vs Unbuffered Channels in Go: How the Size Changes Behavior
In Go, a channel's buffer size is not a tuning knob. It changes what the channel means. Here is when to use each, and why a buffer of 1 is a signal.

Gabriel AnhaiaGo 1.22 ServeMux: Method and Wildcard Routing Without a Framework
Go 1.22 gave the standard library method-aware routing and path wildcards. Here is how PathValue, precedence, and {$} actually behave.

Gabriel AnhaiaMutex Contention in Go: Finding It Before It Finds You
Turn on Go's mutex profiler, read the contention report, and fix a hot lock with RWMutex or sharding before it caps your throughput.

Gabriel AnhaiaRate Limiting in Go With golang.org/x/time/rate
Token bucket done right in Go: Limiter with Allow, Wait, and Reserve, per-key limiters, and the burst value almost everyone sets wrong.

Gabriel Anhaiaselect and default in Go: Non-Blocking Sends, Receives, and Polling
The default case turns a blocking channel op into a try. It also invites a busy loop that pins a CPU core. Here is how to use it right.

Gabriel AnhaiaCoordinating Graceful Shutdown Across Goroutines in Go
Shut a Go service down without dropping in-flight work: a done signal, draining, ordered dependent stops, and a deadline that always exits.

Gabriel AnhaiaFan-Out, Fan-In in Go: Parallelizing Work With Channels
Distribute work across N goroutines and merge results with channels: worker pools, WaitGroup close coordination, and keeping order when it matters.