<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mehwish</title>
    <description>The latest articles on DEV Community by Mehwish (@mehwish_e1e7e09af6e0754ed).</description>
    <link>https://dev.to/mehwish_e1e7e09af6e0754ed</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3974605%2F33795a5a-0fa1-4ed9-88d2-e2cc5ebe6531.png</url>
      <title>DEV Community: Mehwish</title>
      <link>https://dev.to/mehwish_e1e7e09af6e0754ed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mehwish_e1e7e09af6e0754ed"/>
    <language>en</language>
    <item>
      <title>GoFr: The Opinionated Go Framework That Takes Observability Seriously</title>
      <dc:creator>Mehwish</dc:creator>
      <pubDate>Fri, 31 Jul 2026 18:46:09 +0000</pubDate>
      <link>https://dev.to/mehwish_e1e7e09af6e0754ed/gofr-the-opinionated-go-framework-that-takes-observability-seriously-53b0</link>
      <guid>https://dev.to/mehwish_e1e7e09af6e0754ed/gofr-the-opinionated-go-framework-that-takes-observability-seriously-53b0</guid>
      <description>&lt;h2&gt;
  
  
  Why I Looked at GoFr
&lt;/h2&gt;

&lt;p&gt;If you've built microservices in Go, you know the drill: pick a router, wire up config loading, bolt on logging, figure out tracing, add health checks, write your own circuit breaker logic... by the time you've written your first "real" endpoint, you've already made a dozen architectural decisions that have nothing to do with your actual business logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GoFr&lt;/strong&gt; is an opinionated microservice framework for Go that tries to remove that tax. It's built with Kubernetes deployment and observability as first-class citizens rather than afterthoughts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Stood Out to Me
&lt;/h2&gt;

&lt;p&gt;A few things made GoFr worth a second look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Batteries-included observability&lt;/strong&gt; — structured logs, distributed traces, and metrics are built in, not something you assemble from five different libraries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;REST standards by default&lt;/strong&gt; — sensible conventions out of the box instead of a blank slate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in resilience&lt;/strong&gt; — HTTP client with circuit breaker support means you're not hand-rolling retry/backoff logic for every service call&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pub/Sub and gRPC support&lt;/strong&gt; — covers the two most common inter-service communication patterns without extra setup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database migrations, cron jobs, health checks&lt;/strong&gt; — the "boring but necessary" plumbing is already there&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hot log-level changes&lt;/strong&gt; — you can adjust verbosity without redeploying, which is a small feature that pays off a lot during incident response
## Getting Started&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The setup is refreshingly minimal. First, make sure you're on &lt;strong&gt;Go 1.24+&lt;/strong&gt;, then pull in the package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go get &lt;span class="nt"&gt;-u&lt;/span&gt; gofr.dev/pkg/gofr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A working "Hello World" service is just a few lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"gofr.dev/pkg/gofr"&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;gofr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/greet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;gofr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"Hello World!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c"&gt;// listens and serves on localhost:8000&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run main.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then hit &lt;code&gt;localhost:8000/greet&lt;/code&gt; and you've got a live HTTP service — no router config, no manual JSON marshaling boilerplate, no separate logging setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where This Fits
&lt;/h2&gt;

&lt;p&gt;GoFr isn't trying to be a general-purpose do-everything toolkit — it's clearly optimized for teams shipping microservices to Kubernetes who want observability and resilience patterns baked in from day one. If that's your world, it's worth evaluating against whatever stack you're using today (whether that's a bare &lt;code&gt;net/http&lt;/code&gt; + custom middleware setup, or another framework like Gin or Echo layered with extra tooling).&lt;/p&gt;

&lt;p&gt;The project is actively maintained — frequent commits, regular releases, and enough real-world adoption to be listed in the &lt;strong&gt;CNCF Landscape&lt;/strong&gt;. It's Apache-2.0 licensed, so there's no ambiguity about usage rights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo&lt;/strong&gt;: &lt;a href="https://github.com/gofr-dev/gofr" rel="noopener noreferrer"&gt;github.com/gofr-dev/gofr&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples&lt;/strong&gt;: check out the &lt;code&gt;examples/&lt;/code&gt; directory in the repo for more runnable patterns beyond the basic "Hello World"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs&lt;/strong&gt;: linked from the README for deeper dives into each feature
If you're building Go microservices and tired of re-solving the same infrastructure problems on every project, GoFr is worth thirty minutes of your time to try out.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Have you used GoFr in production? I'd love to hear how it held up — drop a comment below.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>go</category>
      <category>microservices</category>
    </item>
  </channel>
</rss>
