{"repo":"trycatchkamal/gauzer","free":true,"listed":false,"github":"https://github.com/trycatchkamal/gauzer","clone":"git clone https://github.com/trycatchkamal/gauzer.git","description":"The observability-first validation library for Go. Drop-in struct tags, 61ns zero-alloc performance, and native slog/OTel telemetry on every failure.","language":"Go","stars":17,"topics":["go","go-lib","go-library","golang","golang-library","observability","opentelemetry","otel","slog","validation"],"license":"MIT","category":"analytics","readme_excerpt":"Gauzer Struct validation for Go that natively speaks log/slog and OpenTelemetry - so failures land in Datadog, CloudWatch, or Azure Monitor as queryable structured events, not as strings you have to parse. --- The Problem Most validation libraries return errors as flat strings. That works fine until you're on-call trying to answer \"how often are users failing the age check, and with what values?\" in a production system. What your SREs see today (go-playground/validator): There is no field , no constraint , no value key. You write a regex parser, or you give up. What your SREs see with Gauzer: Every field is a first-class attribute. Your log aggregator can filter on err.field = \"Age\" , group by err.constraint , alert when err.value spikes - no parsing needed. The DiagnosticEvent Gauzer returns implements both error and slog.LogValuer . Pass it to any structured logger and the nesting happens automatically. --- Zero-Friction Migration If you're already using struct tags for validation, migration is a tag rename: Call site: Gauzer parses and compiles your struct's rules exactly once on first use, then takes the zero-allocation hot path on every subsequent call. --- Performance Benchmarks run on a 2-field struct ( Email string , Age int ) with all fields passing: Benchmark ns/op B/op allocs/op --- --- --- --- ValidateStruct (happy path) 61 0 0 IntMinRule (happy path) 1.58 0 0 How: Struct tags are parsed and dispatched to concrete rule types at registration time. Rule dispatch on ","default_branch":null,"files":null,"tree":[],"storefront":"/r/trycatchkamal","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/trycatchkamal/gauzer/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}