Paste a JSON sample on the left and idiomatic Go struct definitions appear on the right. Field names PascalCased, json tags carry the original keys, integer-vs-float and nullable-vs-required inferred from the sample, nested objects emitted as named structs, arrays as slices.
The cross-language counterpart of the JSON-to-TypeScript converter: same paste-a-sample-get-types loop, but the output is a Go struct block with `json:"..."` tags ready to drop into a Go service, CLI, or Lambda handler. Field names are PascalCased so they're exported automatically; the json tag preserves the original wire key so encoding/json round-trips it on decode and re-encode. Use it as the boundary type at an HTTP handler, a Pub/Sub consumer, a CLI flag-parsing layer, or anywhere else you'd reach for an `*sql.Row.Scan`-equivalent for JSON.
What it infers from the sample: strings as `string`, JSON booleans as `bool`, integers as `int` and floats as `float64` (whichever the sample shows), arrays as `[]T` slices with the element type inferred recursively, nested objects as their own named struct (singularised when the field is plural — `tags []string` not `tags Tags`), and absent-or-null fields as `*T` pointer types so you can distinguish missing from zero-valued. When two array elements disagree on a field's presence, the field becomes `*T` with `,omitempty` on the json tag so encoding/json drops it on serialize and zero-values stay decoded as nil. Mixed primitive types in the same key collapse to `interface{}` rather than fabricating a union — Go has no sum types short of a tagged-union wrapper, so the honest answer is `interface{}` plus a switch in your handler.
Out of scope by design (kept simple): no `time.Time` parsing — ISO date strings stay as `string` so encoding/json doesn't reject input that doesn't match Go's RFC3339 default; no custom UnmarshalJSON stubs; no struct field validation tags (govalidator / go-playground/validator). For those, take the generated struct as the starting point and layer the validation tags you need on top. The converter pairs with the homepage JSON-to-TypeScript tool for polyglot teams: paste the same JSON sample on both pages and get matching shapes for your TS frontend and your Go backend in one step. The conversion is pure client-side JavaScript — your JSON stays in your browser tab, nothing is uploaded, no signup.