<?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: Ahmed Raza Idrisi</title>
    <description>The latest articles on DEV Community by Ahmed Raza Idrisi (@ahmedraza_fyntune).</description>
    <link>https://dev.to/ahmedraza_fyntune</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%2F2533524%2F63d54c29-49fc-4cf7-8a18-18a098084828.png</url>
      <title>DEV Community: Ahmed Raza Idrisi</title>
      <link>https://dev.to/ahmedraza_fyntune</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ahmedraza_fyntune"/>
    <language>en</language>
    <item>
      <title># 🎉 Happy Birthday, PHP! 🎂</title>
      <dc:creator>Ahmed Raza Idrisi</dc:creator>
      <pubDate>Wed, 10 Jun 2026 18:34:45 +0000</pubDate>
      <link>https://dev.to/ahmedraza_fyntune/-happy-birthday-php-1moe</link>
      <guid>https://dev.to/ahmedraza_fyntune/-happy-birthday-php-1moe</guid>
      <description>&lt;p&gt;On June 8th, we celebrate another year of PHP—the language that transformed my career from writing simple CRUD applications to building enterprise-grade systems used by thousands of users.&lt;/p&gt;

&lt;p&gt;Over the last few years, PHP has enabled me to build:&lt;/p&gt;

&lt;p&gt;✅ Insurance API integrations with multiple providers&lt;br&gt;
✅ Enterprise-scale applications&lt;br&gt;
✅ Customer and business dashboards&lt;br&gt;
✅ Standalone REST APIs and microservices&lt;br&gt;
✅ PDF generation and document automation systems&lt;br&gt;
✅ AI-powered application features&lt;br&gt;
✅ School and hotel management solutions&lt;br&gt;
✅ High-performance applications with Laravel, OpenSwoole, and FrankenPHP&lt;/p&gt;

&lt;p&gt;What I admire most about PHP is its evolution. The PHP of today is not the PHP people joked about years ago.&lt;/p&gt;

&lt;p&gt;Modern PHP offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong typing&lt;/li&gt;
&lt;li&gt;Enums and Attributes&lt;/li&gt;
&lt;li&gt;Fibers for async programming&lt;/li&gt;
&lt;li&gt;Improved performance&lt;/li&gt;
&lt;li&gt;Excellent tooling&lt;/li&gt;
&lt;li&gt;A mature ecosystem&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Combined with frameworks like Laravel and Symfony, PHP remains one of the most productive technologies for building real-world business applications.&lt;/p&gt;

&lt;p&gt;From handling millions of API requests to powering enterprise workflows, PHP continues to prove its reliability every day.&lt;/p&gt;

&lt;p&gt;A big thank you to Rasmus Lerdorf, the PHP core team, and the entire open-source community for making this ecosystem what it is today.&lt;/p&gt;

&lt;p&gt;Happy Birthday, PHP! 🎉&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the most interesting project you've built with PHP?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>php</category>
      <category>laravel</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why 1 Million GoRoutines Don't Use Your GPU: Understanding CPUs, GPUs, Go's GMP Scheduler, and GPU Computing</title>
      <dc:creator>Ahmed Raza Idrisi</dc:creator>
      <pubDate>Tue, 02 Jun 2026 13:37:43 +0000</pubDate>
      <link>https://dev.to/ahmedraza_fyntune/why-1-million-goroutines-dont-use-your-gpu-understanding-cpus-gpus-gos-gmp-scheduler-and-gpu-1m6i</link>
      <guid>https://dev.to/ahmedraza_fyntune/why-1-million-goroutines-dont-use-your-gpu-understanding-cpus-gpus-gos-gmp-scheduler-and-gpu-1m6i</guid>
      <description>&lt;p&gt;&lt;strong&gt;Article Goal:&lt;/strong&gt;&lt;br&gt;
Write a deep technical article for software engineers explaining why millions of Go goroutines still execute on CPU cores instead of GPU cores, even though both ultimately process binary instructions. The article should start from first principles and progressively build understanding of CPU architecture, GPU architecture, Go's GMP scheduler, operating system threads, concurrency vs parallelism, and GPU computing.&lt;/p&gt;


&lt;h3&gt;
  
  
  Sections to Cover
&lt;/h3&gt;
&lt;h4&gt;
  
  
  1. Introduction
&lt;/h4&gt;

&lt;p&gt;Discuss a common misconception:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If a GPU has thousands of cores and Go can create millions of goroutines, why doesn't Go automatically run goroutines on the GPU?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Introduce the core idea:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Goroutines run on CPU threads.&lt;/li&gt;
&lt;li&gt;GPUs are specialized compute devices.&lt;/li&gt;
&lt;li&gt;Concurrency is different from GPU parallelism.&lt;/li&gt;
&lt;/ul&gt;


&lt;h4&gt;
  
  
  2. Understanding CPU Architecture
&lt;/h4&gt;

&lt;p&gt;Explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modern CPUs (Intel i5, i7, AMD Ryzen).&lt;/li&gt;
&lt;li&gt;Small number of powerful cores.&lt;/li&gt;
&lt;li&gt;Branch prediction.&lt;/li&gt;
&lt;li&gt;Large caches.&lt;/li&gt;
&lt;li&gt;Out-of-order execution.&lt;/li&gt;
&lt;li&gt;Context switching.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Include diagram:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CPU
├── Core 1
├── Core 2
├── Core 3
└── Core 4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Discuss why CPUs excel at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Filesystems&lt;/li&gt;
&lt;li&gt;Operating system tasks&lt;/li&gt;
&lt;li&gt;Business logic&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  3. Understanding GPU Architecture
&lt;/h4&gt;

&lt;p&gt;Explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NVIDIA RTX 4090&lt;/li&gt;
&lt;li&gt;CUDA cores&lt;/li&gt;
&lt;li&gt;Streaming Multiprocessors&lt;/li&gt;
&lt;li&gt;Massive parallelism&lt;/li&gt;
&lt;li&gt;Throughput-oriented design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Diagram:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GPU
├── SM 1
│   ├── 100s of threads
├── SM 2
│   ├── 100s of threads
...
└── SM N
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Discuss why GPUs excel at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Matrix multiplication&lt;/li&gt;
&lt;li&gt;AI&lt;/li&gt;
&lt;li&gt;Simulations&lt;/li&gt;
&lt;li&gt;Image processing&lt;/li&gt;
&lt;li&gt;Scientific computing&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  4. Go's GMP Scheduler Explained
&lt;/h4&gt;

&lt;p&gt;Explain:&lt;/p&gt;

&lt;p&gt;G = Goroutine&lt;/p&gt;

&lt;p&gt;M = Machine (OS Thread)&lt;/p&gt;

&lt;p&gt;P = Processor (Logical Scheduler)&lt;/p&gt;

&lt;p&gt;Diagram:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1,000,000 Goroutines
        ↓
 Go Scheduler
        ↓
     P Pool
        ↓
    M Threads
        ↓
    CPU Cores
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clarify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;P is NOT a GPU processor.&lt;/li&gt;
&lt;li&gt;P is a scheduling context inside Go runtime.&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  5. What Happens When You Launch One Million Goroutines
&lt;/h4&gt;

&lt;p&gt;Example:&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;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;1000000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;go&lt;/span&gt; &lt;span class="n"&gt;worker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go does not create 1 million OS threads.&lt;/li&gt;
&lt;li&gt;Goroutines are multiplexed onto a small number of CPU threads.&lt;/li&gt;
&lt;li&gt;Scheduler performs work stealing.&lt;/li&gt;
&lt;li&gt;Lightweight stack allocation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Memory comparison:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OS Thread ≈ 1MB–8MB
Goroutine ≈ 2KB initial stack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  6. Why API Calls Don't Benefit From GPUs
&lt;/h4&gt;

&lt;p&gt;Example:&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;go&lt;/span&gt; &lt;span class="n"&gt;fetchMarketData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Break down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;TCP&lt;/li&gt;
&lt;li&gt;TLS&lt;/li&gt;
&lt;li&gt;Socket operations&lt;/li&gt;
&lt;li&gt;Waiting for remote server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Timeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CPU Work: 0.5ms
Network Wait: 99.5ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explain why GPU acceleration provides no benefit.&lt;/p&gt;




&lt;h4&gt;
  
  
  7. When GPUs Actually Shine
&lt;/h4&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Black-Scholes calculations&lt;/li&gt;
&lt;li&gt;Greeks calculations&lt;/li&gt;
&lt;li&gt;Monte Carlo simulations&lt;/li&gt;
&lt;li&gt;Option chain analytics&lt;/li&gt;
&lt;li&gt;Risk analysis&lt;/li&gt;
&lt;li&gt;AI trading models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Diagram:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 Million Option Contracts
        ↓
GPU Threads
        ↓
Delta
Gamma
Theta
Vega
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  8. Go + CUDA Architecture
&lt;/h4&gt;

&lt;p&gt;Show architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Go
├── Market Data
├── APIs
├── WebSockets
├── Risk Engine
└── GPU Dispatcher
          ↓
      CUDA
          ↓
        RTX 4090
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explain that Go orchestrates work while CUDA executes calculations.&lt;/p&gt;




&lt;h4&gt;
  
  
  9. Python vs Go vs Rust for GPU Workloads
&lt;/h4&gt;

&lt;p&gt;Compare:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;th&gt;CPU Performance&lt;/th&gt;
&lt;th&gt;GPU Integration&lt;/th&gt;
&lt;th&gt;Typical Use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;td&gt;AI/ML&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Go&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Services&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rust&lt;/td&gt;
&lt;td&gt;Very High&lt;/td&gt;
&lt;td&gt;Growing&lt;/td&gt;
&lt;td&gt;Systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C++&lt;/td&gt;
&lt;td&gt;Maximum&lt;/td&gt;
&lt;td&gt;Native&lt;/td&gt;
&lt;td&gt;HPC&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Explain that most Python GPU workloads ultimately execute C++/CUDA kernels.&lt;/p&gt;




&lt;h4&gt;
  
  
  10. Real Trading System Architecture
&lt;/h4&gt;

&lt;p&gt;Design a production-grade option screener:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Market Feed
      ↓
Go Services
      ↓
Kafka
      ↓
GPU Cluster
      ↓
Risk Engine
      ↓
Trade Signals
      ↓
Execution Engine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Discuss:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scalability&lt;/li&gt;
&lt;li&gt;Latency&lt;/li&gt;
&lt;li&gt;GPU utilization&lt;/li&gt;
&lt;li&gt;Cost considerations&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  11. Key Takeaways
&lt;/h4&gt;

&lt;p&gt;Summarize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Goroutines run on CPUs.&lt;/li&gt;
&lt;li&gt;GMP's P is not a GPU processor.&lt;/li&gt;
&lt;li&gt;GPUs are not replacements for CPUs.&lt;/li&gt;
&lt;li&gt;GPUs accelerate mathematical workloads.&lt;/li&gt;
&lt;li&gt;Go is excellent for orchestration.&lt;/li&gt;
&lt;li&gt;CUDA/Rust/C++ are used for extreme numerical workloads.&lt;/li&gt;
&lt;li&gt;Modern trading systems combine CPU concurrency and GPU acceleration.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>programming</category>
      <category>architecture</category>
      <category>go</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Using Redis for API Caching in Go (Speed Up Your Backend)</title>
      <dc:creator>Ahmed Raza Idrisi</dc:creator>
      <pubDate>Sat, 09 May 2026 13:15:34 +0000</pubDate>
      <link>https://dev.to/ahmedraza_fyntune/using-redis-for-api-caching-in-go-speed-up-your-backend-3nfc</link>
      <guid>https://dev.to/ahmedraza_fyntune/using-redis-for-api-caching-in-go-speed-up-your-backend-3nfc</guid>
      <description>&lt;p&gt;After building APIs in Go, the next big question is:&lt;/p&gt;

&lt;p&gt;👉 How do you make them faster?&lt;/p&gt;

&lt;p&gt;This is where Redis comes in.&lt;/p&gt;

&lt;p&gt;In this post, we’ll:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect Go with Redis&lt;/li&gt;
&lt;li&gt;Cache API responses&lt;/li&gt;
&lt;li&gt;Reduce database load&lt;/li&gt;
&lt;li&gt;Improve performance&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 What is Redis?
&lt;/h2&gt;

&lt;p&gt;Redis is an in-memory database used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Sessions&lt;/li&gt;
&lt;li&gt;Queues&lt;/li&gt;
&lt;li&gt;Real-time systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of Redis like:&lt;br&gt;
👉 “Super-fast temporary storage”&lt;/p&gt;

&lt;p&gt;Instead of hitting PostgreSQL every time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First request → DB&lt;/li&gt;
&lt;li&gt;Next requests → Redis cache ⚡&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  ⚙️ Install Redis Package
&lt;/h2&gt;



&lt;p&gt;```bash id="gq78f0"&lt;br&gt;
go get github.com/redis/go-redis/v9&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---

## 📦 Connect Redis



```go id="lb7m2n"
package main

import (
    "context"
    "github.com/redis/go-redis/v9"
)

var ctx = context.Background()

var rdb = redis.NewClient(&amp;amp;redis.Options{
    Addr: "localhost:6379",
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🗄️ Example API Response
&lt;/h2&gt;

&lt;p&gt;Normally:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```go id="1h9v4t"&lt;br&gt;
func getUsersFromDB() string {&lt;br&gt;
    return "Users from PostgreSQL"&lt;br&gt;
}&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


But hitting DB repeatedly is expensive.

---

## ⚡ Add Redis Caching



```go id="h4m92g"
func getUsers(w http.ResponseWriter, r *http.Request) {

    cachedData, err := rdb.Get(ctx, "users").Result()

    if err == nil {
        w.Write([]byte("Cache Hit 🚀\n" + cachedData))
        return
    }

    data := getUsersFromDB()

    rdb.Set(ctx, "users", data, time.Minute*5)

    w.Write([]byte("DB Hit 🐘\n" + data))
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔥 What’s Happening Here?
&lt;/h2&gt;
&lt;h3&gt;
  
  
  First Request
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Redis has no data&lt;/li&gt;
&lt;li&gt;Fetch from DB&lt;/li&gt;
&lt;li&gt;Store in Redis&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Next Requests
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Redis already has data&lt;/li&gt;
&lt;li&gt;Return instantly ⚡&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  📊 Why Caching Matters
&lt;/h2&gt;

&lt;p&gt;Without cache:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client → API → Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With cache:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client → API → Redis ⚡
             ↓
          Database (less often)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 Benefits of Redis
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Faster APIs&lt;/li&gt;
&lt;li&gt;Reduced DB load&lt;/li&gt;
&lt;li&gt;Better scalability&lt;/li&gt;
&lt;li&gt;Improved user experience&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚠️ Important Production Notes
&lt;/h2&gt;

&lt;p&gt;Don’t cache forever.&lt;/p&gt;

&lt;p&gt;Always:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set expiration time&lt;/li&gt;
&lt;li&gt;Clear cache after updates&lt;/li&gt;
&lt;li&gt;Avoid stale data&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧭 Real-World Usage
&lt;/h2&gt;

&lt;p&gt;Redis is used in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication systems&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;API caching&lt;/li&gt;
&lt;li&gt;Queues&lt;/li&gt;
&lt;li&gt;Real-time apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Companies like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Netflix&lt;/li&gt;
&lt;li&gt;Instagram&lt;/li&gt;
&lt;li&gt;Twitter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;use Redis heavily.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Final Thought
&lt;/h2&gt;

&lt;p&gt;Caching is one of the easiest ways to improve backend performance.&lt;/p&gt;

&lt;p&gt;You don’t always need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bigger servers&lt;/li&gt;
&lt;li&gt;More CPUs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sometimes…&lt;br&gt;
👉 You just need smarter architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Coming Next
&lt;/h2&gt;

&lt;p&gt;👉 Rate Limiting in Go API&lt;br&gt;
👉 Background Jobs with Redis&lt;br&gt;
👉 Redis Pub/Sub in Go&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>api</category>
      <category>programming</category>
      <category>go</category>
    </item>
    <item>
      <title>Structuring a Go API Like Laravel (Controller, Service, Repository)</title>
      <dc:creator>Ahmed Raza Idrisi</dc:creator>
      <pubDate>Mon, 04 May 2026 11:39:24 +0000</pubDate>
      <link>https://dev.to/ahmedraza_fyntune/structuring-a-go-api-like-laravel-controller-service-repository-1675</link>
      <guid>https://dev.to/ahmedraza_fyntune/structuring-a-go-api-like-laravel-controller-service-repository-1675</guid>
      <description>&lt;p&gt;If you're coming from Laravel, one thing feels missing in Go:&lt;/p&gt;

&lt;p&gt;👉 Structure&lt;/p&gt;

&lt;p&gt;By default, Go gives you freedom—but no clear architecture.&lt;/p&gt;

&lt;p&gt;So in this post, we’ll structure a Go API like Laravel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Controller → Handle request&lt;/li&gt;
&lt;li&gt;Service → Business logic&lt;/li&gt;
&lt;li&gt;Repository → Database&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Why Structure Matters
&lt;/h2&gt;

&lt;p&gt;Without structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code becomes messy quickly&lt;/li&gt;
&lt;li&gt;Hard to scale&lt;/li&gt;
&lt;li&gt;Difficult to debug&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean separation of concerns&lt;/li&gt;
&lt;li&gt;Easier testing&lt;/li&gt;
&lt;li&gt;Production-ready codebase&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📁 Folder Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project/
 ├── main.go
 ├── controller/
 ├── service/
 ├── repository/
 ├── model/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧱 Model (model/user.go)
&lt;/h2&gt;



&lt;p&gt;```go id="6pn1u5"&lt;br&gt;
package model&lt;/p&gt;

&lt;p&gt;type User struct {&lt;br&gt;
    ID   int    &lt;code&gt;json:"id"&lt;/code&gt;&lt;br&gt;
    Name string &lt;code&gt;json:"name"&lt;/code&gt;&lt;br&gt;
}&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---

## 🗄️ Repository Layer

Handles database queries



```go id="aq1u8u"
package repository

import (
    "database/sql"
    "yourapp/model"
)

type UserRepository struct {
    DB *sql.DB
}

func (r *UserRepository) GetAll() ([]model.User, error) {
    rows, err := r.DB.Query("SELECT id, name FROM users")
    if err != nil {
        return nil, err
    }
    defer rows.Close()

    var users []model.User

    for rows.Next() {
        var user model.User
        rows.Scan(&amp;amp;user.ID, &amp;amp;user.Name)
        users = append(users, user)
    }

    return users, nil
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚙️ Service Layer
&lt;/h2&gt;

&lt;p&gt;Handles business logic&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```go id="qf1kmz"&lt;br&gt;
package service&lt;/p&gt;

&lt;p&gt;import (&lt;br&gt;
    "yourapp/model"&lt;br&gt;
    "yourapp/repository"&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;type UserService struct {&lt;br&gt;
    Repo *repository.UserRepository&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;func (s *UserService) GetUsers() ([]model.User, error) {&lt;br&gt;
    return s.Repo.GetAll()&lt;br&gt;
}&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---

## 🌐 Controller Layer

Handles HTTP requests



```go id="n8t1rn"
package controller

import (
    "encoding/json"
    "net/http"
    "yourapp/service"
)

type UserController struct {
    Service *service.UserService
}

func (c *UserController) GetUsers(w http.ResponseWriter, r *http.Request) {
    users, err := c.Service.GetUsers()
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    json.NewEncoder(w).Encode(users)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 main.go (Wire Everything)
&lt;/h2&gt;



&lt;p&gt;```go id="b4r8f2"&lt;br&gt;
package main&lt;/p&gt;

&lt;p&gt;import (&lt;br&gt;
    "database/sql"&lt;br&gt;
    "log"&lt;br&gt;
    "net/http"&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_ "github.com/lib/pq"

"yourapp/controller"
"yourapp/repository"
"yourapp/service"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;)&lt;/p&gt;

&lt;p&gt;func main() {&lt;br&gt;
    db, _ := sql.Open("postgres", "your_connection_string")&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;repo := &amp;amp;repository.UserRepository{DB: db}
service := &amp;amp;service.UserService{Repo: repo}
controller := &amp;amp;controller.UserController{Service: service}

http.HandleFunc("/users", controller.GetUsers)

log.Println("Server running on :8080")
http.ListenAndServe(":8080", nil)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---

## 🔥 What You Achieved

* Clean architecture like Laravel
* Separation of concerns
* Scalable Go backend structure

---

## 🧭 When to Use This

Use this structure when:

* Building real APIs
* Working in teams
* Scaling projects

---

## 💬 Final Thought

Go doesn’t force structure…

👉 But professionals create one.

If you combine Go performance with Laravel-style architecture, you get the best of both worlds.

---

## 🚀 Coming Next

👉 Add middleware (logging, auth)
👉 Add validation layer
👉 Dockerize Go + PostgreSQL

---

#golang #backend #architecture #programming #webdev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>go</category>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Structuring a Go API Like Laravel (Controller, Service, Repository)</title>
      <dc:creator>Ahmed Raza Idrisi</dc:creator>
      <pubDate>Thu, 30 Apr 2026 19:21:12 +0000</pubDate>
      <link>https://dev.to/ahmedraza_fyntune/structuring-a-go-api-like-laravel-controller-service-repository-31n</link>
      <guid>https://dev.to/ahmedraza_fyntune/structuring-a-go-api-like-laravel-controller-service-repository-31n</guid>
      <description>&lt;p&gt;If you're coming from Laravel, one thing feels missing in Go:&lt;/p&gt;

&lt;p&gt;👉 Structure&lt;/p&gt;

&lt;p&gt;By default, Go gives you freedom—but no clear architecture.&lt;/p&gt;

&lt;p&gt;So in this post, we’ll structure a Go API like Laravel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Controller → Handle request&lt;/li&gt;
&lt;li&gt;Service → Business logic&lt;/li&gt;
&lt;li&gt;Repository → Database&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Why Structure Matters
&lt;/h2&gt;

&lt;p&gt;Without structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code becomes messy quickly&lt;/li&gt;
&lt;li&gt;Hard to scale&lt;/li&gt;
&lt;li&gt;Difficult to debug&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean separation of concerns&lt;/li&gt;
&lt;li&gt;Easier testing&lt;/li&gt;
&lt;li&gt;Production-ready codebase&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📁 Folder Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;project/
 ├── main.go
 ├── controller/
 ├── service/
 ├── repository/
 ├── model/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧱 Model (model/user.go)
&lt;/h2&gt;



&lt;p&gt;```go id="6pn1u5"&lt;br&gt;
package model&lt;/p&gt;

&lt;p&gt;type User struct {&lt;br&gt;
    ID   int    &lt;code&gt;json:"id"&lt;/code&gt;&lt;br&gt;
    Name string &lt;code&gt;json:"name"&lt;/code&gt;&lt;br&gt;
}&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---

## 🗄️ Repository Layer

Handles database queries



```go id="aq1u8u"
package repository

import (
    "database/sql"
    "yourapp/model"
)

type UserRepository struct {
    DB *sql.DB
}

func (r *UserRepository) GetAll() ([]model.User, error) {
    rows, err := r.DB.Query("SELECT id, name FROM users")
    if err != nil {
        return nil, err
    }
    defer rows.Close()

    var users []model.User

    for rows.Next() {
        var user model.User
        rows.Scan(&amp;amp;user.ID, &amp;amp;user.Name)
        users = append(users, user)
    }

    return users, nil
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚙️ Service Layer
&lt;/h2&gt;

&lt;p&gt;Handles business logic&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```go id="qf1kmz"&lt;br&gt;
package service&lt;/p&gt;

&lt;p&gt;import (&lt;br&gt;
    "yourapp/model"&lt;br&gt;
    "yourapp/repository"&lt;br&gt;
)&lt;/p&gt;

&lt;p&gt;type UserService struct {&lt;br&gt;
    Repo *repository.UserRepository&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;func (s *UserService) GetUsers() ([]model.User, error) {&lt;br&gt;
    return s.Repo.GetAll()&lt;br&gt;
}&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---

## 🌐 Controller Layer

Handles HTTP requests



```go id="n8t1rn"
package controller

import (
    "encoding/json"
    "net/http"
    "yourapp/service"
)

type UserController struct {
    Service *service.UserService
}

func (c *UserController) GetUsers(w http.ResponseWriter, r *http.Request) {
    users, err := c.Service.GetUsers()
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    json.NewEncoder(w).Encode(users)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 main.go (Wire Everything)
&lt;/h2&gt;



&lt;p&gt;```go id="b4r8f2"&lt;br&gt;
package main&lt;/p&gt;

&lt;p&gt;import (&lt;br&gt;
    "database/sql"&lt;br&gt;
    "log"&lt;br&gt;
    "net/http"&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_ "github.com/lib/pq"

"yourapp/controller"
"yourapp/repository"
"yourapp/service"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;)&lt;/p&gt;

&lt;p&gt;func main() {&lt;br&gt;
    db, _ := sql.Open("postgres", "your_connection_string")&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;repo := &amp;amp;repository.UserRepository{DB: db}
service := &amp;amp;service.UserService{Repo: repo}
controller := &amp;amp;controller.UserController{Service: service}

http.HandleFunc("/users", controller.GetUsers)

log.Println("Server running on :8080")
http.ListenAndServe(":8080", nil)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---

## 🔥 What You Achieved

* Clean architecture like Laravel
* Separation of concerns
* Scalable Go backend structure

---

## 🧭 When to Use This

Use this structure when:

* Building real APIs
* Working in teams
* Scaling projects

---

## 💬 Final Thought

Go doesn’t force structure…

👉 But professionals create one.

If you combine Go performance with Laravel-style architecture, you get the best of both worlds.

---

## 🚀 Coming Next

👉 Add middleware (logging, auth)
👉 Add validation layer
👉 Dockerize Go + PostgreSQL

---

#golang #backend #architecture #programming #webdev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>go</category>
      <category>webdev</category>
      <category>programming</category>
      <category>backend</category>
    </item>
    <item>
      <title>🏗️ System Architecture Simplified: From Monolith to Microservices (With Real Insights)</title>
      <dc:creator>Ahmed Raza Idrisi</dc:creator>
      <pubDate>Mon, 27 Apr 2026 11:18:50 +0000</pubDate>
      <link>https://dev.to/ahmedraza_fyntune/system-architecture-simplified-from-monolith-to-microservices-with-real-insights-2fc9</link>
      <guid>https://dev.to/ahmedraza_fyntune/system-architecture-simplified-from-monolith-to-microservices-with-real-insights-2fc9</guid>
      <description>&lt;p&gt;When you start building applications, everything feels simple — one codebase, one database, one deployment. But as your app grows, things start breaking in subtle ways: slow performance, deployment risks, tight coupling.&lt;/p&gt;

&lt;p&gt;That’s where &lt;strong&gt;System Architecture&lt;/strong&gt; becomes critical.&lt;/p&gt;

&lt;p&gt;Let’s break it down in a practical, developer-first way.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 What is System Architecture?
&lt;/h2&gt;

&lt;p&gt;System Architecture defines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How components interact&lt;/li&gt;
&lt;li&gt;How data flows&lt;/li&gt;
&lt;li&gt;How scalable and maintainable your system is&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as the &lt;strong&gt;blueprint of your application&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 Monolithic Architecture (Where Most of Us Start)
&lt;/h2&gt;

&lt;p&gt;In a monolith:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Everything is in one codebase&lt;/li&gt;
&lt;li&gt;One database&lt;/li&gt;
&lt;li&gt;Single deployment unit&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Pros:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simple to build and deploy&lt;/li&gt;
&lt;li&gt;Easy debugging (initially)&lt;/li&gt;
&lt;li&gt;Great for MVPs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ Cons:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Hard to scale specific parts&lt;/li&gt;
&lt;li&gt;Deployment becomes risky&lt;/li&gt;
&lt;li&gt;Tight coupling across modules&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example (Laravel App):
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Auth + Payments + Orders + Notifications → all inside one project&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 When Monolith Starts Failing
&lt;/h2&gt;

&lt;p&gt;You’ll notice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small changes break unrelated features&lt;/li&gt;
&lt;li&gt;Deployments take longer&lt;/li&gt;
&lt;li&gt;Scaling requires scaling everything&lt;/li&gt;
&lt;li&gt;Teams step on each other’s code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the point where you rethink architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 Microservices Architecture
&lt;/h2&gt;

&lt;p&gt;Instead of one big app:&lt;br&gt;
👉 You split into independent services&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auth Service&lt;/li&gt;
&lt;li&gt;Payment Service&lt;/li&gt;
&lt;li&gt;Order Service&lt;/li&gt;
&lt;li&gt;Notification Service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each service:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Has its own codebase&lt;/li&gt;
&lt;li&gt;Can have its own database&lt;/li&gt;
&lt;li&gt;Is deployed independently&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🔹 Microservices Pros &amp;amp; Cons
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Pros:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Independent scaling&lt;/li&gt;
&lt;li&gt;Faster deployments&lt;/li&gt;
&lt;li&gt;Better fault isolation&lt;/li&gt;
&lt;li&gt;Tech flexibility (Go, Node, PHP, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  ❌ Cons:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Network complexity&lt;/li&gt;
&lt;li&gt;Debugging becomes harder&lt;/li&gt;
&lt;li&gt;Requires DevOps maturity&lt;/li&gt;
&lt;li&gt;Distributed data challenges&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🔹 Real-World Architecture Pattern
&lt;/h2&gt;

&lt;p&gt;A common modern setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ Client (Vue/React) ]
          ↓
     API Gateway
          ↓
 ┌────────┼────────┐
 ↓        ↓        ↓
Auth   Orders   Payments
Svc     Svc       Svc
 ↓        ↓        ↓
 DB       DB       DB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔹 Key Concepts You Must Know
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. API Gateway
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Single entry point&lt;/li&gt;
&lt;li&gt;Handles auth, routing, rate limiting&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Service Communication
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;REST (simple)&lt;/li&gt;
&lt;li&gt;gRPC (fast, efficient)&lt;/li&gt;
&lt;li&gt;Message Queues (async processing)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Database Strategy
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Shared DB ❌ (avoid)&lt;/li&gt;
&lt;li&gt;Database per service ✅&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Caching Layer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Redis for performance boost&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Queue System
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Background jobs (emails, reports)&lt;/li&gt;
&lt;li&gt;Tools: Redis queues, Kafka, RabbitMQ&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 Monolith vs Microservices (Quick Comparison)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Monolith&lt;/th&gt;
&lt;th&gt;Microservices&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Single&lt;/td&gt;
&lt;td&gt;Independent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scaling&lt;/td&gt;
&lt;td&gt;Full app&lt;/td&gt;
&lt;td&gt;Service-level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complexity&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flexibility&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔹 What Should YOU Choose?
&lt;/h2&gt;

&lt;p&gt;👉 If you're building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MVP / Startup → &lt;strong&gt;Monolith&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Growing SaaS → &lt;strong&gt;Modular Monolith&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Large-scale system → &lt;strong&gt;Microservices&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 Pro tip:&lt;br&gt;
&lt;strong&gt;Don’t jump to microservices too early. Scale your architecture only when needed.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;System architecture is not about trends — it’s about &lt;strong&gt;trade-offs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Start simple.&lt;br&gt;
Measure pain points.&lt;br&gt;
Evolve your architecture.&lt;/p&gt;

&lt;p&gt;That’s how real systems are built.&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>distributedsystems</category>
      <category>programming</category>
      <category>microservices</category>
    </item>
    <item>
      <title>🚀 Building a CRUD API in Go with PostgreSQL (Step-by-Step)</title>
      <dc:creator>Ahmed Raza Idrisi</dc:creator>
      <pubDate>Mon, 27 Apr 2026 11:09:38 +0000</pubDate>
      <link>https://dev.to/ahmedraza_fyntune/building-a-crud-api-in-go-with-postgresql-step-by-step-2n34</link>
      <guid>https://dev.to/ahmedraza_fyntune/building-a-crud-api-in-go-with-postgresql-step-by-step-2n34</guid>
      <description>&lt;p&gt;In the previous post, we built a simple CRUD API in Go using in-memory storage.&lt;/p&gt;

&lt;p&gt;Now let’s make it &lt;strong&gt;real-world ready&lt;/strong&gt; by connecting it to a database:&lt;/p&gt;

&lt;p&gt;👉 PostgreSQL&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Step 1: Install PostgreSQL Driver
&lt;/h2&gt;

&lt;p&gt;We’ll use the official driver:&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 github.com/lib/pq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧱 Step 2: Setup Database Connection
&lt;/h2&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="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"database/sql"&lt;/span&gt;
    &lt;span class="s"&gt;"log"&lt;/span&gt;

    &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="s"&gt;"github.com/lib/pq"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;sql&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DB&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;initDB&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;connStr&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s"&gt;"user=postgres password=postgres dbname=testdb sslmode=disable"&lt;/span&gt;

    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="kt"&gt;error&lt;/span&gt;
    &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sql&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"postgres"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;connStr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&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;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Ping&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&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;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"DB not reachable:"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Connected to PostgreSQL ✅"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🗄️ Step 3: Create Table
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;SERIAL&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧩 Step 4: Model
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;type&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;ID&lt;/span&gt;   &lt;span class="kt"&gt;int&lt;/span&gt;    &lt;span class="s"&gt;`json:"id"`&lt;/span&gt;
    &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="s"&gt;`json:"name"`&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ➕ Create User (INSERT)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;createUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewDecoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QueryRow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="s"&gt;"INSERT INTO users(name) VALUES($1) RETURNING id"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&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;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📥 Get Users (SELECT)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;getUsers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SELECT id, name FROM users"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&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;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;defer&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt;
        &lt;span class="n"&gt;rows&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Scan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✏️ Update User
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;updateUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;idParam&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;()&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;"id"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="n"&gt;User&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewDecoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="s"&gt;"UPDATE users SET name=$1 WHERE id=$2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;idParam&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&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;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Updated"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ❌ Delete User
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;deleteUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;idParam&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Query&lt;/span&gt;&lt;span class="p"&gt;()&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;"id"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"DELETE FROM users WHERE id=$1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;idParam&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&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;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Deleted"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🌐 Step 5: Main Function
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&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;initDB&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/users"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;getUsers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/create"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;createUser&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/update"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;updateUser&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/delete"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;deleteUser&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Server running on :8080"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ListenAndServe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;":8080"&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Test API
&lt;/h2&gt;

&lt;p&gt;Same as before, but now data is stored in PostgreSQL 🎉&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ Improvements You Should Do Next
&lt;/h2&gt;

&lt;p&gt;This is still beginner-level. To make it production-ready:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use environment variables for DB config&lt;/li&gt;
&lt;li&gt;Add validation&lt;/li&gt;
&lt;li&gt;Use a router (Chi / Gorilla Mux)&lt;/li&gt;
&lt;li&gt;Structure code (controllers, services, repo)&lt;/li&gt;
&lt;li&gt;Add connection pooling tuning&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔥 What You Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Connecting Go to PostgreSQL&lt;/li&gt;
&lt;li&gt;Executing SQL queries (&lt;code&gt;INSERT&lt;/code&gt;, &lt;code&gt;SELECT&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Handling real database-backed APIs&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Coming Next
&lt;/h2&gt;

&lt;p&gt;👉 Proper API structure in Go (like Laravel mindset)&lt;br&gt;
👉 Using Docker with Go + PostgreSQL&lt;br&gt;
👉 Adding authentication (JWT)&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Final Thought
&lt;/h2&gt;

&lt;p&gt;Now you're no longer just learning Go…&lt;/p&gt;

&lt;p&gt;👉 You're building backend systems.&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>programming</category>
      <category>go</category>
      <category>ai</category>
    </item>
    <item>
      <title>🔥 Arrays vs Slices in Go (Explained in the Simplest Way)</title>
      <dc:creator>Ahmed Raza Idrisi</dc:creator>
      <pubDate>Wed, 22 Apr 2026 17:10:21 +0000</pubDate>
      <link>https://dev.to/ahmedraza_fyntune/arrays-vs-slices-in-go-explained-in-the-simplest-way-48ca</link>
      <guid>https://dev.to/ahmedraza_fyntune/arrays-vs-slices-in-go-explained-in-the-simplest-way-48ca</guid>
      <description>&lt;p&gt;If you just started learning Go, one thing will confuse you quickly:&lt;/p&gt;

&lt;p&gt;👉 Arrays vs Slices&lt;/p&gt;

&lt;p&gt;They look similar… but behave very differently.&lt;/p&gt;

&lt;p&gt;Let’s break it down in the simplest way possible 👇&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 What is an Array?
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;array&lt;/strong&gt; is a fixed-size collection.&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="n"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key points:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Size is &lt;strong&gt;fixed&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Cannot grow or shrink&lt;/li&gt;
&lt;li&gt;Rarely used in real-world Go apps&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔄 What is a Slice?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;slice&lt;/strong&gt; is a dynamic version of an array.&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="n"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key points:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Size is &lt;strong&gt;dynamic&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Can grow using &lt;code&gt;append&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Used &lt;strong&gt;almost everywhere in Go&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚡ Adding Data (Only Works with Slice)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧠 Under the Hood (Important Concept)
&lt;/h2&gt;

&lt;p&gt;A slice is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pointer to an array&lt;/li&gt;
&lt;li&gt;Length&lt;/li&gt;
&lt;li&gt;Capacity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it like:&lt;br&gt;
👉 “A flexible view on top of an array”&lt;/p&gt;


&lt;h2&gt;
  
  
  🔍 Slice Example with Capacity
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;numbers&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c"&gt;// 2&lt;/span&gt;
&lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;numbers&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c"&gt;// 5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ❗ Common Mistake
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// ❌ ERROR&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Why?&lt;br&gt;
👉 Because arrays are fixed size&lt;/p&gt;


&lt;h2&gt;
  
  
  🔥 Real-World Use Case
&lt;/h2&gt;

&lt;p&gt;When building APIs:&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="n"&gt;users&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Ahmed"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"John"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dynamic data = slices ✅&lt;/p&gt;




&lt;h2&gt;
  
  
  🧭 When to Use What?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Array&lt;/th&gt;
&lt;th&gt;Slice&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Size&lt;/td&gt;
&lt;td&gt;Fixed&lt;/td&gt;
&lt;td&gt;Dynamic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Usage&lt;/td&gt;
&lt;td&gt;Rare&lt;/td&gt;
&lt;td&gt;Common&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flexibility&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;👉 In 95% of cases → use &lt;strong&gt;slice&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Final Thought
&lt;/h2&gt;

&lt;p&gt;If you understand slices, you understand &lt;strong&gt;how Go manages data internally&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is a foundational concept—don’t skip it.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Coming Next
&lt;/h2&gt;

&lt;p&gt;Next post:&lt;br&gt;
👉 Structs in Go (this is where real backend modeling starts)&lt;/p&gt;




&lt;h1&gt;
  
  
  golang #backend #programming #webdev #devto
&lt;/h1&gt;

</description>
      <category>go</category>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
    </item>
    <item>
      <title>🚀 Getting Started with Go (Golang) for Backend Developers</title>
      <dc:creator>Ahmed Raza Idrisi</dc:creator>
      <pubDate>Wed, 22 Apr 2026 17:07:57 +0000</pubDate>
      <link>https://dev.to/ahmedraza_fyntune/getting-started-with-go-golang-for-backend-developers-4lpp</link>
      <guid>https://dev.to/ahmedraza_fyntune/getting-started-with-go-golang-for-backend-developers-4lpp</guid>
      <description>&lt;p&gt;If you're coming from PHP, Node.js, or Laravel, learning Go can feel different—but in a good way.&lt;/p&gt;

&lt;p&gt;Go is designed for &lt;strong&gt;performance, simplicity, and concurrency&lt;/strong&gt;. Many modern systems use it for building fast APIs and scalable services.&lt;/p&gt;

&lt;p&gt;Let’s understand it in a simple way 👇&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 What is Go?
&lt;/h2&gt;

&lt;p&gt;Go (or Golang) is a &lt;strong&gt;compiled programming language&lt;/strong&gt; created at Google.&lt;/p&gt;

&lt;p&gt;Think of it like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⚡ Faster than PHP/Node (compiled)&lt;/li&gt;
&lt;li&gt;🧼 Cleaner syntax than Java&lt;/li&gt;
&lt;li&gt;🔁 Built for concurrency (handling multiple tasks efficiently)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚙️ Your First Go Program
&lt;/h2&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;"fmt"&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;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello, World!"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What’s happening?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;package main&lt;/code&gt; → entry point&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;import "fmt"&lt;/code&gt; → used for printing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;func main()&lt;/code&gt; → main function where execution starts&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔤 Variables in Go
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s"&gt;"Ahmed"&lt;/span&gt;
&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;25&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No need to write types explicitly (Go infers them).&lt;/p&gt;




&lt;h2&gt;
  
  
  🔁 Loops (Only ONE loop in Go)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple and clean.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Functions
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧵 Concurrency (This is where Go shines)
&lt;/h2&gt;

&lt;p&gt;Go uses &lt;strong&gt;goroutines&lt;/strong&gt; (lightweight threads):&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;go&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Running in background"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why this matters:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Handle multiple API requests easily&lt;/li&gt;
&lt;li&gt;Build high-performance systems&lt;/li&gt;
&lt;li&gt;Perfect for microservices&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 Simple API in Go
&lt;/h2&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="p"&gt;(&lt;/span&gt;
    &lt;span class="s"&gt;"fmt"&lt;/span&gt;
    &lt;span class="s"&gt;"net/http"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ResponseWriter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Hello from Go API"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&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;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HandleFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ListenAndServe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;":8080"&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="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it and open:&lt;br&gt;
👉 &lt;a href="http://localhost:8080" rel="noopener noreferrer"&gt;http://localhost:8080&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 Why You Should Learn Go
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;High performance (close to C++)&lt;/li&gt;
&lt;li&gt;Simple syntax&lt;/li&gt;
&lt;li&gt;Great for backend + APIs&lt;/li&gt;
&lt;li&gt;Used by companies like Google, Uber, Netflix&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧭 Coming Next
&lt;/h2&gt;

&lt;p&gt;In upcoming posts, I’ll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building REST APIs in Go&lt;/li&gt;
&lt;li&gt;Connecting Go with PostgreSQL&lt;/li&gt;
&lt;li&gt;Using Go with Docker&lt;/li&gt;
&lt;li&gt;Concurrency deep dive (goroutines + channels)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💬 Final Thought
&lt;/h2&gt;

&lt;p&gt;If you already know backend development, Go will feel like a &lt;strong&gt;power upgrade&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Start small. Stay consistent. Share what you learn.&lt;/p&gt;




&lt;h1&gt;
  
  
  golang #backend #programming #webdev #devto
&lt;/h1&gt;

</description>
      <category>go</category>
      <category>programming</category>
      <category>webdev</category>
      <category>opensource</category>
    </item>
    <item>
      <title>🚀 5 Modern PHP Features You Should Start Using Today</title>
      <dc:creator>Ahmed Raza Idrisi</dc:creator>
      <pubDate>Wed, 22 Apr 2026 17:03:48 +0000</pubDate>
      <link>https://dev.to/ahmedraza_fyntune/5-modern-php-features-you-should-start-using-today-4i2j</link>
      <guid>https://dev.to/ahmedraza_fyntune/5-modern-php-features-you-should-start-using-today-4i2j</guid>
      <description>&lt;p&gt;If you’re still writing PHP like it's 2015, you're missing out on some powerful features that make your code cleaner, safer, and easier to maintain.&lt;/p&gt;

&lt;p&gt;In this post, I’ll walk you through &lt;strong&gt;5 modern PHP features&lt;/strong&gt; in a very simple way — with examples you can actually use in real projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. ✅ Typed Properties (Strict Data Handling)
&lt;/h2&gt;

&lt;p&gt;Before PHP 7.4, you couldn’t define types for class properties.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Old way:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ New way:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why it matters:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Prevents invalid data&lt;/li&gt;
&lt;li&gt;Makes your code predictable&lt;/li&gt;
&lt;li&gt;Helps avoid bugs early&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. ✅ Arrow Functions (Shorter Closures)
&lt;/h2&gt;

&lt;p&gt;Arrow functions make your code shorter and cleaner.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Old way:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$numbers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nv"&gt;$squared&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;array_map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$n&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="nv"&gt;$n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nv"&gt;$n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="nv"&gt;$numbers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ New way:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$squared&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;array_map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;fn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nv"&gt;$n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why it matters:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Less boilerplate&lt;/li&gt;
&lt;li&gt;More readable functional code&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. ✅ Null Safe Operator (&lt;code&gt;?-&amp;gt;&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Avoid those annoying null checks.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Old way:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ New way:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="o"&gt;?-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;profile&lt;/span&gt;&lt;span class="o"&gt;?-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why it matters:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Cleaner code&lt;/li&gt;
&lt;li&gt;No more "trying to access property of null" errors&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. ✅ Match Expression (Better than switch)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;match&lt;/code&gt; is more strict and cleaner than &lt;code&gt;switch&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ switch:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s1"&gt;'success'&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
        &lt;span class="nv"&gt;$msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Done'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s1"&gt;'error'&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
        &lt;span class="nv"&gt;$msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'Failed'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ match:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$status&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s1"&gt;'success'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Done'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'error'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Failed'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'Unknown'&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why it matters:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No &lt;code&gt;break&lt;/code&gt; needed&lt;/li&gt;
&lt;li&gt;Strict comparison (no type confusion)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. ✅ Constructor Property Promotion
&lt;/h2&gt;

&lt;p&gt;Less boilerplate when creating classes.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Old way:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ New way:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;__construct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why it matters:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Cleaner classes&lt;/li&gt;
&lt;li&gt;Less repetitive code&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔥 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Modern PHP is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster ⚡&lt;/li&gt;
&lt;li&gt;Cleaner ✨&lt;/li&gt;
&lt;li&gt;Safer 🔒&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're working with frameworks like Laravel, these features are already being used under the hood — so understanding them will level up your coding skills.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 What Next?
&lt;/h2&gt;

&lt;p&gt;If you found this useful, I can share:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-world Laravel examples using these features&lt;/li&gt;
&lt;li&gt;Performance tips for PHP apps&lt;/li&gt;
&lt;li&gt;Clean architecture patterns in PHP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let me know in the comments 👇&lt;/p&gt;




&lt;h1&gt;
  
  
  PHP #Laravel #WebDevelopment #Backend #Programming
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>php</category>
      <category>laravel</category>
    </item>
    <item>
      <title>The Case of the Empty 500: How I Proved the API Failure Wasn't Our Fault</title>
      <dc:creator>Ahmed Raza Idrisi</dc:creator>
      <pubDate>Wed, 11 Feb 2026 17:40:56 +0000</pubDate>
      <link>https://dev.to/ahmedraza_fyntune/the-case-of-the-empty-500-how-i-proved-the-api-failure-wasnt-our-fault-1h37</link>
      <guid>https://dev.to/ahmedraza_fyntune/the-case-of-the-empty-500-how-i-proved-the-api-failure-wasnt-our-fault-1h37</guid>
      <description>&lt;p&gt;We’ve all been there. You make an API call, it fails, and the finger-pointing begins. "It’s the frontend," says the backend team. "It’s your service," says the API provider.&lt;/p&gt;

&lt;p&gt;Recently, I faced a debugging challenge where our application was receiving an empty response from an external API. On the surface, it looked like our request was simply vanishing into the void. Here is how I tracked down the culprit: The WAF.&lt;/p&gt;

&lt;p&gt;The Problem&lt;br&gt;
Our application was calling an external endpoint. The symptoms were frustratingly vague:&lt;/p&gt;

&lt;p&gt;Response Body: Completely empty.&lt;/p&gt;

&lt;p&gt;Result: The application logic failed because there was no data to parse.&lt;/p&gt;

&lt;p&gt;Internal Consensus: Initial thoughts were that our request payload was malformed or our connection was dropping.&lt;/p&gt;

&lt;p&gt;Digging into the Headers&lt;br&gt;
While the response body was empty, the HTTP Status Code and Response Headers told a different story. I noticed two red flags:&lt;/p&gt;

&lt;p&gt;Status Code 500: A "500 Internal Server Error" usually implies the server tried to do something and failed. If it were our network, we’d likely see a 404 or a timeout.&lt;/p&gt;

&lt;p&gt;Infrastructure Headers: Looking at the network trace, I saw headers related to Cloudflare and specific WAF (Web Application Firewall) signatures.&lt;/p&gt;

&lt;p&gt;The "Aha!" Moment&lt;br&gt;
By analyzing the custom headers injected by their WAF, I realized the request wasn't even reaching their application code. Their security layer was intercepting our request and dropping the payload before the server could process it.&lt;/p&gt;

&lt;p&gt;Even though the body was empty, the presence of those specific infrastructure headers proved that the hand-off to their network was successful, but their security rules were blocking us.&lt;/p&gt;

&lt;p&gt;The Resolution&lt;br&gt;
I presented the logs and the specific WAF headers to the provider's network team. With this evidence, they were able to:&lt;/p&gt;

&lt;p&gt;Identify the specific firewall rule that was flagging our IP/payload.&lt;/p&gt;

&lt;p&gt;Whitelist our service.&lt;/p&gt;

&lt;p&gt;Restore the API functionality.&lt;/p&gt;

&lt;p&gt;Key Takeaways for Debugging APIs&lt;br&gt;
Never ignore the headers: The body might be empty, but headers are the "fingerprints" of the servers the request passed through.&lt;/p&gt;

&lt;p&gt;Status codes matter: A 500 error is a server-side confession.&lt;/p&gt;

&lt;p&gt;Check for Middleware: In modern web dev, you aren't just talking to a server; you're talking to Load Balancers, WAFs, and Proxies.&lt;/p&gt;

</description>
      <category>api</category>
      <category>webdev</category>
      <category>debugging</category>
      <category>security</category>
    </item>
    <item>
      <title>laravel request life cycle</title>
      <dc:creator>Ahmed Raza Idrisi</dc:creator>
      <pubDate>Fri, 26 Sep 2025 15:21:04 +0000</pubDate>
      <link>https://dev.to/ahmedraza_fyntune/laravel-request-life-cycle-3l4</link>
      <guid>https://dev.to/ahmedraza_fyntune/laravel-request-life-cycle-3l4</guid>
      <description>&lt;h3&gt;
  
  
  Laravel Request Lifecycle
&lt;/h3&gt;

&lt;p&gt;The Laravel request lifecycle begins when a user sends an HTTP request to the web server (Apache, Nginx). The server forwards the request to the &lt;code&gt;public/index.php&lt;/code&gt; file, the application's single entry point. This file loads Composer’s autoloader, performs essential bootstrapping, and constructs a new instance of the Laravel application.&lt;/p&gt;

&lt;p&gt;The next step is the HTTP Kernel, which manages the request, response, and middleware stacks. The global middleware stack runs first, acting as filters for every HTTP request. Service providers register core services, and after bootstrapping, the router dispatches the request to a route or controller, executing any route-specific middleware.&lt;/p&gt;

&lt;p&gt;Controllers (or route closures) process the request and generate a response—HTML view, JSON, download, or redirect. Before the response is sent to the user's browser, it passes back out through the middleware stack for any post-processing. Finally, the Kernel’s &lt;code&gt;handle()&lt;/code&gt; method returns the response for &lt;code&gt;index.php&lt;/code&gt; to deliver to the browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  Middleware's Role in the Lifecycle
&lt;/h3&gt;

&lt;p&gt;Middleware in Laravel act as filters operating before or after the core route/controller logic. They check authentication, log requests, manipulate headers, etc. Middleware can be global (applied to all requests) or route-specific (applied only to selected routes). Middleware can halt, redirect, modify requests, or even process responses before they're sent back to the client.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating Custom Middleware
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Global Middleware
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Generate middleware:
&lt;code&gt;php artisan make:middleware CustomGlobalMiddleware&lt;/code&gt;.[8]&lt;/li&gt;
&lt;li&gt;Add logic in &lt;code&gt;app/Http/Middleware/CustomGlobalMiddleware.php&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;  &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;Closure&lt;/span&gt; &lt;span class="nv"&gt;$next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// Custom logic here&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Register in &lt;code&gt;app/Http/Kernel.php&lt;/code&gt; by adding to the &lt;code&gt;$middleware&lt;/code&gt; array:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;  &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$middleware&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="c1"&gt;// ... existing middleware,&lt;/span&gt;
      &lt;span class="nc"&gt;\App\Http\Middleware\CustomGlobalMiddleware&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Now the middleware runs for every HTTP request.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Route Middleware
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Generate middleware:
&lt;code&gt;php artisan make:middleware CustomRouteMiddleware&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add logic in &lt;code&gt;app/Http/Middleware/CustomRouteMiddleware.php&lt;/code&gt; as above.&lt;/li&gt;
&lt;li&gt;Register in &lt;code&gt;app/Http/Kernel.php&lt;/code&gt; within &lt;code&gt;$routeMiddleware&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;  &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$routeMiddleware&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="s1"&gt;'custom'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nc"&gt;\App\Http\Middleware\CustomRouteMiddleware&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Apply to route:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;  &lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/example'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&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="s1"&gt;'Example Route'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'custom'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;For groups:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;  &lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'custom'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/a'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;...&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/b'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;...&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Passing Parameters to Middleware
&lt;/h3&gt;

&lt;p&gt;Parameters can be sent to route middleware by appending them after a colon in the route definition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/post/{id}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'PostController@show'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;middleware&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'verify.role:admin'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the middleware class, receive them as extra arguments:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;Closure&lt;/span&gt; &lt;span class="nv"&gt;$next&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$role&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Check for required role&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$next&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To access route parameters (like &lt;code&gt;{id}&lt;/code&gt;) inside middleware:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'id'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Gets route param 'id'&lt;/span&gt;
&lt;span class="nv"&gt;$params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// All parameters array&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This lets you make your middleware context-aware and dynamic.&lt;/p&gt;




&lt;h3&gt;
  
  
  Quick Reference Table: Request Lifecycle Steps
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Web Server&lt;/td&gt;
&lt;td&gt;Receives &amp;amp; forwards HTTP request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;index.php&lt;/td&gt;
&lt;td&gt;Application entry, bootstraps Laravel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kernel&lt;/td&gt;
&lt;td&gt;Handles requests, global middleware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service Providers&lt;/td&gt;
&lt;td&gt;Register services&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Router&lt;/td&gt;
&lt;td&gt;Routes requests, applies route middleware&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Controller/View&lt;/td&gt;
&lt;td&gt;Core logic &amp;amp; generates response&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Middleware&lt;/td&gt;
&lt;td&gt;Filters/Processes requests &amp;amp; responses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Response&lt;/td&gt;
&lt;td&gt;Sent back via Kernel &amp;amp; index.php&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;This sequence gives a robust, hands-on understanding of where middleware intercepts requests, how to build custom ones, and how parameters integrate with the lifecycle—all as essential for mastering Laravel’s request flow and middleware.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>laravel</category>
      <category>php</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
