Go Developer Tools
Small, exact answers to the questions that cost a working Go developer an afternoon. Each one runs in your browser, in Go compiled to WebAssembly — the same packages, with the same tests, that would run on a server.
Nothing you paste is transmitted. There is no endpoint behind any of these pages, so there is nothing to send it to: the module is fetched once from this origin and everything after that happens in the tab. Disconnect the network once a page has loaded and it keeps working.
Every tool here is free and needs no account. None of them costs a credit, and none of them asks for one.
-
Go Time Layout Converter — strftime to Go, and back
Convert a C strftime format string to a Go reference layout and back, directive by directive, with every unmappable directive named rather than guessed.
-
Go Method Sets — why *T implements the interface and T does not
Paste a type and an interface and get both method sets computed by go/types, with the compiler's own error and the rule it follows from.
-
Go Struct Field Alignment — offsets, padding, and what reordering saves
Paste a struct and get every field's offset, the padding between them, the total size, and a reordered version with the saving — for the architecture you choose.
-
Go Slice Growth — what append actually does to the capacity
Watch a slice's capacity grow append by append: the formula's answer, the allocator's rounding, the size class it lands in, and the bytes left behind.
-
Go Goroutine Dump Analyzer — read a SIGQUIT or panic stack dump
Paste a goroutine dump and get it grouped by state and by stack, with wait durations and the stacks held by far more goroutines than they should be.
-
GOGC and GOMEMLIMIT Calculator — which one is actually deciding your heap
Compute both documented target-heap rules, see which one binds, and find out when GOGC has stopped having any effect at all.
-
Go Benchmark Comparison — is that 4% real?
Paste two go test -bench outputs and get the Mann-Whitney U comparison: median change, p-value, and an honest answer when there is not enough data to tell.
-
Go Minimal Version Selection — why that version, and who asked for it
Paste a go mod graph and see minimal version selection worked out: every version required, who required it, and the path from your main module to the requirement that won.
-
Go Escape Analysis Explainer — read what -gcflags=-m actually said
Paste the output of go build -gcflags=-m and get it grouped by cause, with the -m -m reason chains read as derivations and every form the grammar does not cover named rather than guessed.
-
Go Channel Deadlock Visualizer — every interleaving, not a guess
Write a small concurrent program in a published grammar and get every interleaving explored: the shortest path to a deadlock, what each goroutine is waiting on, and the wait-for cycle when there is one.
How these work
Every tool is a thin page in front of an ordinary Go package. The parsing, the arithmetic and the type checking are all done by that package, compiled once to WebAssembly; the page reads your input, hands it over, and draws what comes back. Nothing is reimplemented in JavaScript, which is the only way the answer a page gives can be the answer Go gives.
The section ships two modules rather than one per tool. The tools that read Go source need the compiler's own front end — go/ast and go/types — which is most of a Go toolchain by size, so they share one module and the rest share a much smaller one. A page loads only the module it needs, and only when you open it.
Where the answers come from
Where a tool describes runtime behavior, it derives the numbers from the Go toolchain installed at build time rather than from a blog post: size classes and the slice growth thresholds are read out of the standard library's own source, and every page that depends on them says which Go version they came from. Where a notation cannot express something, the tool names the gap instead of guessing at it — a converted format string that quietly prints the wrong field is worse than no answer at all.