<?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: Md Abu Musa</title>
    <description>The latest articles on DEV Community by Md Abu Musa (@abstractmusa).</description>
    <link>https://dev.to/abstractmusa</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F370086%2Fe5f83684-8937-4d12-89f1-cdef521de790.png</url>
      <title>DEV Community: Md Abu Musa</title>
      <link>https://dev.to/abstractmusa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abstractmusa"/>
    <language>en</language>
    <item>
      <title>cURL: The Swiss Army Knife of Data Transfer</title>
      <dc:creator>Md Abu Musa</dc:creator>
      <pubDate>Mon, 26 Jan 2026 06:30:13 +0000</pubDate>
      <link>https://dev.to/abstractmusa/curl-the-swiss-army-knife-of-data-transfer-6pl</link>
      <guid>https://dev.to/abstractmusa/curl-the-swiss-army-knife-of-data-transfer-6pl</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; (Client URL) is one of the most powerful and widely used command-line tools in software engineering. It enables data transfer between a client and a server using various network protocols. From testing REST APIs to downloading files, debugging HTTP requests, and automating workflows, &lt;code&gt;curl&lt;/code&gt; is an essential tool for developers, system administrators, and DevOps engineers.&lt;/p&gt;

&lt;p&gt;This blog explores what &lt;code&gt;curl&lt;/code&gt; is, how it works, its most common use cases, and practical examples that you can apply in real-world scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What Is cURL?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; is an open-source command-line tool and library (&lt;code&gt;libcurl&lt;/code&gt;) used to transfer data to or from a server using URLs. It supports a wide range of protocols, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP / HTTPS&lt;/li&gt;
&lt;li&gt;FTP / FTPS&lt;/li&gt;
&lt;li&gt;SCP / SFTP&lt;/li&gt;
&lt;li&gt;SMTP / POP3 / IMAP&lt;/li&gt;
&lt;li&gt;LDAP&lt;/li&gt;
&lt;li&gt;MQTT&lt;/li&gt;
&lt;li&gt;FILE&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tool is available by default on most Linux and macOS systems and can be installed easily on Windows.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why cURL Is Important&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; is popular because it is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lightweight and fast&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scriptable&lt;/strong&gt; (perfect for automation)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protocol-agnostic&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Widely supported&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ideal for API testing and debugging&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In backend development and DevOps, &lt;code&gt;curl&lt;/code&gt; is often the first tool used to verify whether a service or endpoint is working correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Basic cURL Syntax&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="o"&gt;[&lt;/span&gt;options] URL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This sends a basic &lt;strong&gt;HTTP GET request&lt;/strong&gt; and prints the response body to the terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Common HTTP Operations with cURL&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. GET Request&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.example.com/users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Used to retrieve data from a server.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. POST Request&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.example.com/users &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"name":"Musa","email":"musa@example.com"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Used to send data to the server, commonly for creating resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. PUT Request&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; PUT https://api.example.com/users/1 &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"name":"Updated Name"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Used to update existing resources.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. DELETE Request&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; DELETE https://api.example.com/users/1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Used to delete a resource.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Working with Headers&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Send Custom Headers&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer TOKEN"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Accept: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     https://api.example.com/profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;View Response Headers&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-i&lt;/span&gt; https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Authentication with cURL&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Basic Authentication&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-u&lt;/span&gt; username:password https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Bearer Token Authentication&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer YOUR_TOKEN"&lt;/span&gt; https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Handling JSON Responses&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To pretty-print JSON responses, combine &lt;code&gt;curl&lt;/code&gt; with &lt;code&gt;jq&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://api.example.com/users | jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is extremely useful when debugging APIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;File Upload and Download&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Download a File&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-O&lt;/span&gt; https://example.com/file.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Upload a File&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s2"&gt;"file=@image.png"&lt;/span&gt; https://api.example.com/upload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Debugging and Verbose Mode&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Verbose Output&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-v&lt;/span&gt; https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request headers&lt;/li&gt;
&lt;li&gt;Response headers&lt;/li&gt;
&lt;li&gt;TLS handshake details&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Very useful for debugging network issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Timeouts and Retries&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Set Timeout&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;--max-time&lt;/span&gt; 10 https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Retry on Failure&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;--retry&lt;/span&gt; 3 https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Following Redirects&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By default, &lt;code&gt;curl&lt;/code&gt; does not follow redirects unless explicitly told.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Using cURL in Automation and Scripts&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; is commonly used in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CI/CD pipelines&lt;/li&gt;
&lt;li&gt;Health checks&lt;/li&gt;
&lt;li&gt;Cron jobs&lt;/li&gt;
&lt;li&gt;Shell scripts&lt;/li&gt;
&lt;li&gt;Server monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example health check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-f&lt;/span&gt; https://api.example.com/health &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Security Best Practices&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Avoid exposing tokens in terminal history&lt;/li&gt;
&lt;li&gt;Use environment variables for credentials&lt;/li&gt;
&lt;li&gt;Prefer HTTPS over HTTP&lt;/li&gt;
&lt;li&gt;Validate SSL certificates (avoid &lt;code&gt;-k&lt;/code&gt; in production)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;cURL vs Postman&lt;/strong&gt;
&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;cURL&lt;/th&gt;
&lt;th&gt;Postman&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Command-line&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GUI&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lightweight&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD friendly&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;&lt;strong&gt;Best practice:&lt;/strong&gt; Use Postman for exploration and &lt;code&gt;curl&lt;/code&gt; for automation and production debugging.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; is an indispensable tool for modern software engineering. Its simplicity, flexibility, and power make it ideal for API testing, system administration, and automation tasks. Mastering &lt;code&gt;curl&lt;/code&gt; significantly improves your ability to debug, test, and interact with network services efficiently.&lt;/p&gt;

&lt;p&gt;Whether you are a backend engineer, DevOps professional, or software architect, &lt;code&gt;curl&lt;/code&gt; deserves a permanent place in your toolkit.&lt;/p&gt;

</description>
      <category>api</category>
      <category>cli</category>
      <category>networking</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Ubuntu Server Resource Monitoring via Command Line</title>
      <dc:creator>Md Abu Musa</dc:creator>
      <pubDate>Sat, 13 Dec 2025 14:52:54 +0000</pubDate>
      <link>https://dev.to/abstractmusa/ubuntu-server-resource-monitoring-via-command-line-1e42</link>
      <guid>https://dev.to/abstractmusa/ubuntu-server-resource-monitoring-via-command-line-1e42</guid>
      <description>&lt;p&gt;Monitoring system resources is a &lt;strong&gt;critical responsibility for backend engineers, DevOps engineers, and system administrators&lt;/strong&gt;. Whether you are running a Laravel API, Node.js app, Docker containers, or an AWS EC2 instance, understanding how your Ubuntu server consumes &lt;strong&gt;CPU, memory, disk, and network resources&lt;/strong&gt; helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detect performance bottlenecks early&lt;/li&gt;
&lt;li&gt;Prevent unexpected downtime&lt;/li&gt;
&lt;li&gt;Optimize application performance&lt;/li&gt;
&lt;li&gt;Make informed scaling decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This blog provides a &lt;strong&gt;professional, practical, and production-oriented guide&lt;/strong&gt; to checking system resource usage on an &lt;strong&gt;Ubuntu Server using only command-line tools&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Why Resource Monitoring Matters
&lt;/h2&gt;

&lt;p&gt;In real-world production environments, issues like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slow API responses&lt;/li&gt;
&lt;li&gt;Sudden 504 Gateway Timeout errors&lt;/li&gt;
&lt;li&gt;Random application crashes&lt;/li&gt;
&lt;li&gt;Server freeze or reboot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;are often &lt;strong&gt;symptoms of resource exhaustion&lt;/strong&gt; rather than application bugs.&lt;/p&gt;

&lt;p&gt;Regular monitoring helps answer critical questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is CPU overloaded?&lt;/li&gt;
&lt;li&gt;Is RAM exhausted or swapping?&lt;/li&gt;
&lt;li&gt;Is disk space full?&lt;/li&gt;
&lt;li&gt;Is disk I/O causing delays?&lt;/li&gt;
&lt;li&gt;Which process is consuming the most resources?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Quick System Health Overview
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Command
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;uptime&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What it shows
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;System running time&lt;/li&gt;
&lt;li&gt;Number of logged-in users&lt;/li&gt;
&lt;li&gt;Load average (1, 5, 15 minutes)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to interpret load average
&lt;/h3&gt;

&lt;p&gt;If your server has &lt;strong&gt;4 CPU cores&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Load average ≈ 4 → normal&lt;/li&gt;
&lt;li&gt;Load average &amp;gt; 4 → CPU under pressure&lt;/li&gt;
&lt;li&gt;Load average &amp;gt;&amp;gt; 4 → serious performance issue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the &lt;strong&gt;fastest health check command&lt;/strong&gt; you should use first.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Real-Time CPU and Memory Monitoring
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Using &lt;code&gt;top&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;top
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Key metrics
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;%CPU&lt;/code&gt; → CPU usage per process&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;%MEM&lt;/code&gt; → Memory usage per process&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;load average&lt;/code&gt; → overall CPU load&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Useful shortcuts
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Shift + P&lt;/code&gt; → sort by CPU usage&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Shift + M&lt;/code&gt; → sort by memory usage&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;q&lt;/code&gt; → quit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;top&lt;/code&gt; is available by default on all Ubuntu servers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using &lt;code&gt;htop&lt;/code&gt; (Recommended)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;htop
htop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Why &lt;code&gt;htop&lt;/code&gt; is better
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Color-coded CPU and memory bars&lt;/li&gt;
&lt;li&gt;Easy process killing&lt;/li&gt;
&lt;li&gt;Tree view of processes&lt;/li&gt;
&lt;li&gt;Mouse support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For daily production monitoring, &lt;strong&gt;htop is strongly recommended&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Memory (RAM) Usage Analysis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Command
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;free &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key fields explained
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;total&lt;/code&gt; → Total RAM&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;used&lt;/code&gt; → Used memory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;available&lt;/code&gt; → Memory available for new processes&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Important&lt;/strong&gt;: Always focus on &lt;code&gt;available&lt;/code&gt;, not &lt;code&gt;free&lt;/code&gt;. Linux uses free memory for caching, which is normal and healthy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If &lt;code&gt;available&lt;/code&gt; memory is very low, your server may start swapping or killing processes.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Disk Usage Monitoring
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Overall disk usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total disk size&lt;/li&gt;
&lt;li&gt;Used space&lt;/li&gt;
&lt;li&gt;Available space&lt;/li&gt;
&lt;li&gt;Mount points&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ If disk usage reaches &lt;strong&gt;90%+&lt;/strong&gt;, services like MySQL, Redis, or Docker may fail.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Directory-wise disk usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; /path/to/directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; /var/www
&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-sh&lt;/span&gt; /var/log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helps identify &lt;strong&gt;which folders are consuming disk space&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. CPU Information and Core Count
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Command
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lscpu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU architecture&lt;/li&gt;
&lt;li&gt;Number of cores&lt;/li&gt;
&lt;li&gt;Threads per core&lt;/li&gt;
&lt;li&gt;CPU model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Knowing the core count is essential for correctly interpreting &lt;strong&gt;load average&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Network Usage Monitoring
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Basic network statistics
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nb"&gt;link&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shows transmitted and received packets per network interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time network monitoring
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nload
nload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIs feel slow&lt;/li&gt;
&lt;li&gt;Upload/download speed is suspicious&lt;/li&gt;
&lt;li&gt;External service calls timeout&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. Disk I/O Performance (Often Overlooked)
&lt;/h2&gt;

&lt;p&gt;High disk I/O wait can slow down applications even when CPU and RAM look normal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Command
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;sysstat
iostat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High &lt;code&gt;%iowait&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Slow read/write rates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is critical for &lt;strong&gt;database-heavy applications&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Identify Resource-Hungry Processes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Top memory-consuming processes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux &lt;span class="nt"&gt;--sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-%mem | &lt;span class="nb"&gt;head&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Top CPU-consuming processes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux &lt;span class="nt"&gt;--sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-%cpu | &lt;span class="nb"&gt;head&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is extremely useful during &lt;strong&gt;production incidents&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. One-Command Live Summary
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Command
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vmstat 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Updates every second and shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU usage&lt;/li&gt;
&lt;li&gt;Memory usage&lt;/li&gt;
&lt;li&gt;Swap activity&lt;/li&gt;
&lt;li&gt;Disk I/O&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A powerful command for &lt;strong&gt;advanced troubleshooting&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Recommended Monitoring Workflow (Production)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;uptime&lt;/code&gt; → Quick health check&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;htop&lt;/code&gt; → Live CPU &amp;amp; memory monitoring&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;free -h&lt;/code&gt; → Memory availability&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;df -h&lt;/code&gt; → Disk usage&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;iostat&lt;/code&gt; → Disk I/O issues&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ps aux&lt;/code&gt; → Identify problematic processes&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  12. Conclusion
&lt;/h2&gt;

&lt;p&gt;Command-line monitoring tools are &lt;strong&gt;lightweight, fast, and reliable&lt;/strong&gt;, making them perfect for Ubuntu servers in production.&lt;/p&gt;

&lt;p&gt;By mastering these commands, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debug performance issues confidently&lt;/li&gt;
&lt;li&gt;Reduce downtime&lt;/li&gt;
&lt;li&gt;Communicate system health clearly to your team&lt;/li&gt;
&lt;li&gt;Grow from a backend engineer into a strong DevOps-aware professional&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Regular monitoring is not optional — &lt;strong&gt;it is a core engineering habit&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>linux</category>
      <category>devops</category>
      <category>performance</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Md Abu Musa</dc:creator>
      <pubDate>Fri, 12 Dec 2025 03:32:21 +0000</pubDate>
      <link>https://dev.to/abstractmusa/-p6k</link>
      <guid>https://dev.to/abstractmusa/-p6k</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/abstractmusa/why-your-ec2-server-suddenly-stops-responding-and-how-to-bulletproof-laravel-node-apps-13l8" class="crayons-story__hidden-navigation-link"&gt;Why Your EC2 Server Suddenly Stops Responding — And How to Bulletproof Laravel &amp;amp; Node Apps&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/abstractmusa" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F370086%2Fe5f83684-8937-4d12-89f1-cdef521de790.png" alt="abstractmusa profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/abstractmusa" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Md Abu Musa
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Md Abu Musa
                
              
              &lt;div id="story-author-preview-content-3095308" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/abstractmusa" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F370086%2Fe5f83684-8937-4d12-89f1-cdef521de790.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Md Abu Musa&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/abstractmusa/why-your-ec2-server-suddenly-stops-responding-and-how-to-bulletproof-laravel-node-apps-13l8" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Dec 9 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/abstractmusa/why-your-ec2-server-suddenly-stops-responding-and-how-to-bulletproof-laravel-node-apps-13l8" id="article-link-3095308"&gt;
          Why Your EC2 Server Suddenly Stops Responding — And How to Bulletproof Laravel &amp;amp; Node Apps
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/node"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;node&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/performance"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;performance&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/abstractmusa/why-your-ec2-server-suddenly-stops-responding-and-how-to-bulletproof-laravel-node-apps-13l8#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>devops</category>
      <category>node</category>
      <category>performance</category>
      <category>aws</category>
    </item>
    <item>
      <title>Why Your EC2 Server Suddenly Stops Responding — And How to Bulletproof Laravel &amp; Node Apps</title>
      <dc:creator>Md Abu Musa</dc:creator>
      <pubDate>Tue, 09 Dec 2025 16:50:34 +0000</pubDate>
      <link>https://dev.to/abstractmusa/why-your-ec2-server-suddenly-stops-responding-and-how-to-bulletproof-laravel-node-apps-13l8</link>
      <guid>https://dev.to/abstractmusa/why-your-ec2-server-suddenly-stops-responding-and-how-to-bulletproof-laravel-node-apps-13l8</guid>
      <description>&lt;p&gt;Managing multiple Laravel and Node.js applications on a single EC2 instance is common in small and mid-sized teams. However, when several applications share the same resources, one heavy operation can freeze the entire server — causing all domains to go down at the same time.&lt;/p&gt;

&lt;p&gt;Recently, we faced a similar issue:&lt;br&gt;
&lt;strong&gt;all test and development domains stopped responding simultaneously&lt;/strong&gt;, even though no code changes were deployed on some of them. The root cause was not immediately clear.&lt;/p&gt;

&lt;p&gt;After detailed inspection, the problem turned out to be resource exhaustion caused by a Node build process running directly on the server.&lt;/p&gt;

&lt;p&gt;This article explains &lt;strong&gt;why this happens&lt;/strong&gt;, &lt;strong&gt;how to diagnose it&lt;/strong&gt;, and &lt;strong&gt;what steps you should take to prevent it permanently&lt;/strong&gt;.&lt;/p&gt;
&lt;h1&gt;
  
  
  &lt;strong&gt;What Actually Happened?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;According to the internal investigation, the issue was caused by:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“The server was unable to load the build and hung the system.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When someone runs &lt;code&gt;npm run build&lt;/code&gt; or &lt;code&gt;yarn build&lt;/code&gt; directly inside an EC2 instance — especially an instance with limited RAM (1–2GB) — Node consumes a large amount of memory to compile and optimize frontend assets.&lt;/p&gt;

&lt;p&gt;As memory usage increases, the server begins to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Swap aggressively&lt;/li&gt;
&lt;li&gt;Kill processes&lt;/li&gt;
&lt;li&gt;Freeze PHP-FPM&lt;/li&gt;
&lt;li&gt;Stall Nginx worker processes&lt;/li&gt;
&lt;li&gt;Hang SSH access&lt;/li&gt;
&lt;li&gt;Stop responding to all HTTP requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because all Laravel apps, Node apps, queue workers, and socket services run under the same OS, the entire system becomes unresponsive.&lt;/p&gt;
&lt;h1&gt;
  
  
  &lt;strong&gt;Why a Node Build Freezes Small EC2 Instances&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Node.js build tools like Vite, Webpack, or Next.js require high memory to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Minify large JS bundles&lt;/li&gt;
&lt;li&gt;Optimize images&lt;/li&gt;
&lt;li&gt;Handle TypeScript&lt;/li&gt;
&lt;li&gt;Perform tree-shaking&lt;/li&gt;
&lt;li&gt;Build multiple targets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On servers with &lt;strong&gt;low memory&lt;/strong&gt;, this triggers:&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;1. 100% CPU consumption&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Node compilers go full throttle.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;2. RAM exhaustion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Node often needs &lt;strong&gt;512 MB – 2 GB&lt;/strong&gt; per build.&lt;br&gt;
This is too heavy for small EC2 instances.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;3. Out-of-Memory (OOM) kills&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The kernel automatically kills PHP-FPM or MySQL first instead of Node.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;4. Nginx stops responding&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Since PHP-FPM dies, Nginx returns 502/504 or hangs completely.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;5. SSH becomes slow&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If swap memory also fills up, the OS stops scheduling tasks.&lt;/p&gt;

&lt;p&gt;This chain reaction brings down &lt;strong&gt;every domain&lt;/strong&gt; hosted on the server.&lt;/p&gt;
&lt;h1&gt;
  
  
  &lt;strong&gt;How to Prevent This Problem in the Future&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Here are practical and immediate measures to avoid similar outages.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;1. Never Build Frontend Code on Production or Test Servers&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build locally&lt;/li&gt;
&lt;li&gt;Build in CI/CD&lt;/li&gt;
&lt;li&gt;Upload only the final &lt;code&gt;dist/&lt;/code&gt; or &lt;code&gt;build/&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;Deploy the compiled assets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This alone prevents 80% of such incidents.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;2. Add a 2GB Swap File&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you're using a small EC2 instance (t2.micro, t3.small, etc.), create a swap file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;fallocate &lt;span class="nt"&gt;-l&lt;/span&gt; 2G /swapfile
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;600 /swapfile
&lt;span class="nb"&gt;sudo &lt;/span&gt;mkswap /swapfile
&lt;span class="nb"&gt;sudo &lt;/span&gt;swapon /swapfile
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"/swapfile swap swap defaults 0 0"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; /etc/fstab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Swap helps the OS avoid crashing when memory runs out.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. Limit Node.js Memory Usage (PM2 Protection)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If apps are running under PM2, apply memory protection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pm2 restart &amp;lt;app&amp;gt; &lt;span class="nt"&gt;--max-memory-restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;300M
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or apply to all:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pm2 restart all &lt;span class="nt"&gt;--max-memory-restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;300M
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents any single Node app from consuming all memory.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;4. Restart PHP-FPM &amp;amp; Nginx During High Load&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If the server slows down or freezes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart php8.1-fpm
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This often restores service instantly.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;5. Monitor Real-Time Resource Usage with htop&lt;/strong&gt;
&lt;/h2&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;htop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;htop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This lets you identify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which process is consuming CPU&lt;/li&gt;
&lt;li&gt;Which service is consuming RAM&lt;/li&gt;
&lt;li&gt;Stuck or zombie processes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;6. Use PM2 Startup to Ensure Node Apps Auto-Restart on Reboot&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pm2 startup
pm2 save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures Node apps come back automatically after a server reboot.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;7. Use a Deployment Pipeline&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The most reliable long-term solution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;GitLab CI&lt;/li&gt;
&lt;li&gt;Bitbucket Pipelines&lt;/li&gt;
&lt;li&gt;Jenkins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Build assets &lt;strong&gt;before deploying&lt;/strong&gt;, not on the server.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;When multiple applications share a single EC2 instance, one heavy task — such as a Node build — can overload system resources and freeze the entire machine. This can bring down all domains and services at once.&lt;/p&gt;

&lt;p&gt;To prevent this, teams should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Avoid running builds directly on servers&lt;/li&gt;
&lt;li&gt;Add swap memory&lt;/li&gt;
&lt;li&gt;Limit Node memory usage&lt;/li&gt;
&lt;li&gt;Monitor resource consumption&lt;/li&gt;
&lt;li&gt;Use CI/CD pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By applying these preventive measures, you ensure stable performance and avoid sudden downtime in development, test, or even production environments.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>node</category>
      <category>performance</category>
      <category>aws</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Md Abu Musa</dc:creator>
      <pubDate>Thu, 02 Oct 2025 13:04:28 +0000</pubDate>
      <link>https://dev.to/abstractmusa/-37f1</link>
      <guid>https://dev.to/abstractmusa/-37f1</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/abstractmusa/how-i-optimized-a-laravel-api-287x-faster-from-27s-to-under-100ms-4cd7" class="crayons-story__hidden-navigation-link"&gt;How I Optimized a Laravel API 287x Faster: From 27s to Under 100ms&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/abstractmusa" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F370086%2Fe5f83684-8937-4d12-89f1-cdef521de790.png" alt="abstractmusa profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/abstractmusa" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Md Abu Musa
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Md Abu Musa
                
              
              &lt;div id="story-author-preview-content-2885215" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/abstractmusa" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F370086%2Fe5f83684-8937-4d12-89f1-cdef521de790.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Md Abu Musa&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/abstractmusa/how-i-optimized-a-laravel-api-287x-faster-from-27s-to-under-100ms-4cd7" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 2 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/abstractmusa/how-i-optimized-a-laravel-api-287x-faster-from-27s-to-under-100ms-4cd7" id="article-link-2885215"&gt;
          How I Optimized a Laravel API 287x Faster: From 27s to Under 100ms
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/laravel"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;laravel&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/performance"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;performance&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mysql"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mysql&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/abstractmusa/how-i-optimized-a-laravel-api-287x-faster-from-27s-to-under-100ms-4cd7#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>laravel</category>
      <category>performance</category>
      <category>productivity</category>
      <category>mysql</category>
    </item>
    <item>
      <title>How I Optimized a Laravel API 287x Faster: From 27s to Under 100ms</title>
      <dc:creator>Md Abu Musa</dc:creator>
      <pubDate>Thu, 02 Oct 2025 13:01:22 +0000</pubDate>
      <link>https://dev.to/abstractmusa/how-i-optimized-a-laravel-api-287x-faster-from-27s-to-under-100ms-4cd7</link>
      <guid>https://dev.to/abstractmusa/how-i-optimized-a-laravel-api-287x-faster-from-27s-to-under-100ms-4cd7</guid>
      <description>&lt;p&gt;&lt;em&gt;Transforming a sluggish patient list API into a lightning-fast, production-ready endpoint through strategic database optimization and response streamlining.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: A Performance Nightmare
&lt;/h2&gt;

&lt;p&gt;Picture this: You're working on a healthcare application with a patient list API that's taking &lt;strong&gt;27+ seconds&lt;/strong&gt; to load just 600 patients. Users are frustrated, the database is overwhelmed, and your server costs are skyrocketing. This was the reality I faced when analyzing our &lt;code&gt;patientList&lt;/code&gt; API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Initial Performance Metrics (The Bad News)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Response Time&lt;/strong&gt;: 27.43 seconds 😱&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database Queries&lt;/strong&gt;: 4,440+ queries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model Instantiations&lt;/strong&gt;: 5,320+ objects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory Usage&lt;/strong&gt;: 20MB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Experience&lt;/strong&gt;: Completely unusable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The API was suffering from the classic &lt;strong&gt;N+1 query problem&lt;/strong&gt; on steroids, with additional issues like unnecessary data transfer and missing database indexes.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Investigation: Root Cause Analysis
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The N+1 Query Monster
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// The problematic code (simplified)&lt;/span&gt;
&lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$patientData&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$pd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$pd&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;userInfo&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;user_uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;           &lt;span class="c1"&gt;// Query 1 per patient&lt;/span&gt;
    &lt;span class="nv"&gt;$pd&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;officeInfo&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;office_name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;       &lt;span class="c1"&gt;// Query 2 per patient&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="nf"&gt;findPatientDefaultData&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="c1"&gt;// Query 3 per patient&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="nf"&gt;findPatientInsurance&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="c1"&gt;// Query 4 per patient&lt;/span&gt;
    &lt;span class="c1"&gt;// ... and so on&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For 600 patients, this meant &lt;strong&gt;4,440+ individual database queries&lt;/strong&gt; just in the foreach loop!&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Unnecessary Data Transfer
&lt;/h3&gt;

&lt;p&gt;The API was returning 27+ fields per patient, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Personal details (SSN, addresses, BMI, weight)&lt;/li&gt;
&lt;li&gt;Insurance information&lt;/li&gt;
&lt;li&gt;Questionnaire data&lt;/li&gt;
&lt;li&gt;Profile assets&lt;/li&gt;
&lt;li&gt;Referral information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most of this data wasn't being used by the frontend.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Missing Database Indexes
&lt;/h3&gt;

&lt;p&gt;Critical columns lacked proper indexing, causing full table scans on every query.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Solution: A Multi-Layered Optimization Strategy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Phase 1: Eliminate N+1 Queries with Eager Loading
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Before: N+1 queries&lt;/span&gt;
&lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$patientData&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$pd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$pd&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;userInfo&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;user_uuid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Individual query per patient&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// After: Batch loading with eager loading&lt;/span&gt;
&lt;span class="nv"&gt;$query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PatientUnderOffice&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;with&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="s1"&gt;'userInfo:id,user_uuid,email,type'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'officeInfo:id,office_name'&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;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'dentist_office_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$dentist_office_id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Only load clinical visits in batch (for last_clinical_visit field)&lt;/span&gt;
&lt;span class="nv"&gt;$clinicalVisits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;VisitFormMiscellaneousNote&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'patient_profile_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'date'&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;whereIn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'patient_profile_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$patientProfileIds&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;whereIn&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="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$patientProfileIds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$query&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;DB&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'MAX(id)'&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;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'visit_form_miscellaneous_notes'&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;whereIn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'patient_profile_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$patientProfileIds&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;groupBy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'patient_profile_id'&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;get&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;keyBy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'patient_profile_id'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Phase 2: Streamline Response Structure
&lt;/h3&gt;

&lt;p&gt;I identified that the frontend only needed 15 essential fields out of 42 total fields. Here's what I removed:&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="c1"&gt;// Removed 27 unnecessary fields:&lt;/span&gt;
&lt;span class="nv"&gt;$removedFields&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s1"&gt;'referred_by'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'assets'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'referral_type'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'referred_time'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'referred_note'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'dentist_office'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'gender'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'marital_status'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'height'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'ssn'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'address_one'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'address_two'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'city'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'state'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'zipCode'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'email'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'bmi'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'weight'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'self_pay_status'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'created_at'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'updated_at'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'employer_details'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'questionnaire_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'symptoms'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'epworth'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'treatment'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'history'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'insurance'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'temp_updated_value'&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;// Kept only essential fields:&lt;/span&gt;
&lt;span class="nv"&gt;$essentialFields&lt;/span&gt; &lt;span class="o"&gt;=&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="s1"&gt;'user_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'user_uuid'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'patient_profile_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'dentist_office_id'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'first_name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'middle_name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'last_name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'preferred_name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s1"&gt;'type'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'dob'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'phone_numbers'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'status'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'last_clinical_visit'&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Phase 3: Add Strategic Database Indexes
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Migration: Add performance indexes&lt;/span&gt;
&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'patient_under_offices'&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="kt"&gt;Blueprint&lt;/span&gt; &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'dentist_office_id'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'status'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'created_at'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'first_name'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'last_name'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;DB&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'phone_numbers(50)'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'patient_profile_id'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'users'&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="kt"&gt;Blueprint&lt;/span&gt; &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'email'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'user_uuid'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// ... and more strategic indexes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Phase 4: Optimize Model Relationships
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Optimized relationships with selective field loading&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;userInfo&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;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'App\Models\User'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'user_id'&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="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;select&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="s1"&gt;'user_uuid'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'email'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'type'&lt;/span&gt;&lt;span class="p"&gt;);&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;officeInfo&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;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'App\Models\DentistOfficeProfile'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'dentist_office_id'&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="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;select&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="s1"&gt;'office_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;h2&gt;
  
  
  The Results: From Nightmare to Dream
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Performance Transformation
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;th&gt;Improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Response Time&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;27.43s&lt;/td&gt;
&lt;td&gt;95.72ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;99.7% faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Database Queries&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4,440+&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;99.8% reduction&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model Instantiations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5,320+&lt;/td&gt;
&lt;td&gt;1,796&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;66% reduction&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory Usage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;20MB&lt;/td&gt;
&lt;td&gt;8MB&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;60% reduction&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Response Size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Large&lt;/td&gt;
&lt;td&gt;~2KB&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;70% smaller&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Real-World Impact
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User Experience&lt;/strong&gt;: From completely unusable to instant loading&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server Costs&lt;/strong&gt;: Massive reduction in database load&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Can now handle 10x more concurrent users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance&lt;/strong&gt;: Cleaner, more focused codebase&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Key Lessons Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Always Profile Before Optimizing
&lt;/h3&gt;

&lt;p&gt;Use Laravel Debugbar or similar tools to identify the real bottlenecks. Don't guess!&lt;/p&gt;

&lt;h3&gt;
  
  
  2. N+1 Queries Are Performance Killers
&lt;/h3&gt;

&lt;p&gt;Eager loading and batch queries should be your first optimization targets.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Less Data = Better Performance
&lt;/h3&gt;

&lt;p&gt;Only return what the frontend actually needs. Every unnecessary field costs bandwidth and processing time.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Database Indexes Are Critical
&lt;/h3&gt;

&lt;p&gt;Proper indexing can make the difference between a query taking 1ms vs 1000ms.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Measure Everything
&lt;/h3&gt;

&lt;p&gt;Before and after metrics are crucial for proving the value of your optimizations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tools and Techniques Used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Laravel Debugbar&lt;/strong&gt;: For performance profiling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eager Loading&lt;/strong&gt;: &lt;code&gt;with()&lt;/code&gt; method for relationship optimization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch Queries&lt;/strong&gt;: &lt;code&gt;whereIn()&lt;/code&gt; for bulk data loading&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selective Field Loading&lt;/strong&gt;: &lt;code&gt;select()&lt;/code&gt; to limit data transfer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database Indexes&lt;/strong&gt;: Strategic indexing for query optimization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response Streamlining&lt;/strong&gt;: Removing unnecessary data fields&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This optimization transformed a completely unusable API into a lightning-fast, production-ready endpoint. The key was taking a systematic approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Profile&lt;/strong&gt; to identify bottlenecks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eliminate&lt;/strong&gt; N+1 queries with eager loading&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamline&lt;/strong&gt; the response structure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Index&lt;/strong&gt; the database properly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measure&lt;/strong&gt; the results&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result? An API that's &lt;strong&gt;287x faster&lt;/strong&gt; and uses &lt;strong&gt;99.8% fewer database queries&lt;/strong&gt;. Sometimes the biggest performance wins come from the simplest optimizations.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>performance</category>
      <category>productivity</category>
      <category>mysql</category>
    </item>
    <item>
      <title>Deploy Laravel on AWS EC2 with RDS MySQL and NGINX</title>
      <dc:creator>Md Abu Musa</dc:creator>
      <pubDate>Tue, 05 Aug 2025 16:50:13 +0000</pubDate>
      <link>https://dev.to/abstractmusa/deploy-laravel-on-aws-ec2-with-rds-mysql-and-nginx-4bpo</link>
      <guid>https://dev.to/abstractmusa/deploy-laravel-on-aws-ec2-with-rds-mysql-and-nginx-4bpo</guid>
      <description>&lt;p&gt;Setting up a Laravel application on AWS is a powerful way to scale your web applications in a secure and cloud-native environment. This guide walks you through deploying Laravel on an &lt;strong&gt;Ubuntu-based EC2 instance&lt;/strong&gt;, connecting it to an &lt;strong&gt;Amazon RDS MySQL database&lt;/strong&gt;, and using &lt;strong&gt;NGINX&lt;/strong&gt; as the web server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Make sure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ AWS EC2 instance (Ubuntu 22.04+ recommended)&lt;/li&gt;
&lt;li&gt;✅ Amazon RDS MySQL database (accessible to EC2)&lt;/li&gt;
&lt;li&gt;✅ Security Groups properly configured (EC2 &amp;lt;-&amp;gt; RDS: port 3306)&lt;/li&gt;
&lt;li&gt;✅ NGINX installed on EC2&lt;/li&gt;
&lt;li&gt;✅ SSH terminal access to EC2 (e.g., Termius)&lt;/li&gt;
&lt;li&gt;✅ Laravel knowledge (Composer installed)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Update Your Server &amp;amp; Install PHP and Required Extensions
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;php php-fpm php-mysql php-xml php-mbstring php-curl php-zip unzip curl git &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Install Composer (PHP Dependency Manager)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
curl &lt;span class="nt"&gt;-sS&lt;/span&gt; https://getcomposer.org/installer | php
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;composer.phar /usr/local/bin/composer
composer &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Create Laravel Project
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /var/www/
&lt;span class="nb"&gt;sudo &lt;/span&gt;composer create-project laravel/laravel myapp
&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; ubuntu:ubuntu myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Tip: Replace &lt;code&gt;myapp&lt;/code&gt; with your desired app folder name.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 4: Configure Laravel to Use Amazon RDS
&lt;/h2&gt;

&lt;p&gt;Edit the &lt;code&gt;.env&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano /var/www/myapp/.env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update the DB connection settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_CONNECTION=mysql
DB_HOST=your-rds-endpoint.amazonaws.com
DB_PORT=3306
DB_DATABASE=yourdbname
DB_USERNAME=yourdbuser
DB_PASSWORD=yourdbpassword
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Generate Laravel App Key &amp;amp; Run Migration
&lt;/h2&gt;

&lt;p&gt;Ensure the Laravel CLI (&lt;code&gt;artisan&lt;/code&gt;) has permission to write logs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; ubuntu:ubuntu /var/www/myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /var/www/myapp
php artisan key:generate
php artisan migrate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ You should see success messages for both.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Stop Apache (If Installed) &amp;amp; Configure NGINX
&lt;/h2&gt;

&lt;p&gt;Apache often comes pre-installed — stop and disable it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl stop apache2
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl disable apache2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a new NGINX config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/nginx/sites-available/laravel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste the following (replace &lt;code&gt;&amp;lt;your-ip&amp;gt;&lt;/code&gt; and &lt;code&gt;php8.3&lt;/code&gt; if needed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;your-ec2-public-ip&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="n"&gt;/var/www/myapp/public&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;index&lt;/span&gt; &lt;span class="s"&gt;index.php&lt;/span&gt; &lt;span class="s"&gt;index.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="n"&gt;/index.php?&lt;/span&gt;&lt;span class="nv"&gt;$query_string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;\.php$&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="nc"&gt;snippets/fastcgi-php&lt;/span&gt;&lt;span class="s"&gt;.conf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;fastcgi_pass&lt;/span&gt; &lt;span class="s"&gt;unix:/run/php/php8.3-fpm.sock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;fastcgi_param&lt;/span&gt; &lt;span class="s"&gt;SCRIPT_FILENAME&lt;/span&gt; &lt;span class="nv"&gt;$document_root$fastcgi_script_name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="kn"&gt;include&lt;/span&gt; &lt;span class="s"&gt;fastcgi_params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt; &lt;span class="sr"&gt;/\.ht&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kn"&gt;deny&lt;/span&gt; &lt;span class="s"&gt;all&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;p&gt;Enable the Laravel site:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /etc/nginx/sites-enabled/default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test and restart NGINX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nginx &lt;span class="nt"&gt;-t&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 7: Set Folder Permissions for Runtime
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; www-data:www-data /var/www/myapp
&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 775 /var/www/myapp/storage
&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 775 /var/www/myapp/bootstrap/cache
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 8: Visit Your Application
&lt;/h2&gt;

&lt;p&gt;Go to your EC2 public IP in a browser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://&amp;lt;your-ec2-public-ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see the &lt;strong&gt;Laravel welcome page&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>ec2</category>
      <category>rds</category>
      <category>nginx</category>
    </item>
    <item>
      <title>Escape Analysis in Go: Stack vs Heap Allocation Explained</title>
      <dc:creator>Md Abu Musa</dc:creator>
      <pubDate>Sun, 13 Apr 2025 01:44:46 +0000</pubDate>
      <link>https://dev.to/abstractmusa/escape-analysis-in-go-stack-vs-heap-allocation-explained-506a</link>
      <guid>https://dev.to/abstractmusa/escape-analysis-in-go-stack-vs-heap-allocation-explained-506a</guid>
      <description>&lt;p&gt;When writing Go code, performance matters. One of the less obvious performance factors is &lt;strong&gt;how variables are allocated in memory&lt;/strong&gt;. Go manages memory automatically, but understanding &lt;strong&gt;escape analysis&lt;/strong&gt; gives you the power to write more efficient code.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;What escape analysis is&lt;/li&gt;
&lt;li&gt;Why it matters&lt;/li&gt;
&lt;li&gt;How the Go compiler uses it&lt;/li&gt;
&lt;li&gt;Real-world examples&lt;/li&gt;
&lt;li&gt;How to inspect escape analysis in your code&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 What is Escape Analysis?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Escape analysis&lt;/strong&gt; is a technique the Go compiler uses to determine whether a variable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stays within the current function&lt;/strong&gt; → can be safely &lt;strong&gt;allocated on the stack&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escapes the current function&lt;/strong&gt; → must be &lt;strong&gt;allocated on the heap&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🪜 Stack vs Heap
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stack&lt;/strong&gt;: Fast, automatically cleaned up when a function returns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heap&lt;/strong&gt;: Slower, needs garbage collection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Efficient programs aim to &lt;strong&gt;maximize stack allocations&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Why Does It Matter?
&lt;/h2&gt;

&lt;p&gt;Heap allocations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are &lt;strong&gt;slower&lt;/strong&gt; than stack allocations&lt;/li&gt;
&lt;li&gt;Add &lt;strong&gt;pressure on the garbage collector&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Can impact &lt;strong&gt;latency and memory usage&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Knowing what causes a variable to "escape" helps you &lt;strong&gt;write high-performance code&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Basic Example: Stack vs Heap
&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;stackAlloc&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s"&gt;"Musa"&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;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;p&gt;Here, &lt;code&gt;name&lt;/code&gt; is only used inside the function. It doesn’t escape, so Go allocates it &lt;strong&gt;on the stack&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now look at this:&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;func&lt;/span&gt; &lt;span class="n"&gt;heapAlloc&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&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;name&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s"&gt;"Musa"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case, we’re &lt;strong&gt;returning a pointer&lt;/strong&gt; to a local variable. The compiler sees that &lt;code&gt;name&lt;/code&gt; &lt;strong&gt;escapes&lt;/strong&gt; the function, so it &lt;strong&gt;moves it to the heap&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 How to Check Escape Analysis
&lt;/h2&gt;

&lt;p&gt;Run the Go compiler with the &lt;code&gt;-gcflags=-m&lt;/code&gt; flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go build &lt;span class="nt"&gt;-gcflags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-m"&lt;/span&gt; main.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or, if you just want to compile without building:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go run &lt;span class="nt"&gt;-gcflags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-m"&lt;/span&gt; main.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;main.go:6:6: moved to heap: name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This tells you which variables escape.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 More Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Interface Conversion Causes Escape
&lt;/h3&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;logMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;interface&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="n"&gt;msg&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The string &lt;code&gt;msg&lt;/code&gt; escapes because it's converted to an &lt;code&gt;interface{}&lt;/code&gt;, which could be used outside the current scope.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Passing Address to Another Function
&lt;/h3&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;takePointer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kt"&gt;int&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="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;p&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;escapeByPassing&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;num&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;42&lt;/span&gt;
    &lt;span class="n"&gt;takePointer&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;num&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;Even though &lt;code&gt;num&lt;/code&gt; is not returned, passing its address to another function may cause it to &lt;strong&gt;escape&lt;/strong&gt;, depending on whether that function stores the pointer.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Closures Can Cause Escape
&lt;/h3&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;closureEscape&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;func&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;x&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;Here, &lt;code&gt;x&lt;/code&gt; escapes because it is captured by the returned closure.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Best Practices
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tip&lt;/th&gt;
&lt;th&gt;Explanation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Avoid unnecessary pointer returns&lt;/td&gt;
&lt;td&gt;Return values instead of pointers if not needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Be cautious with interface{}&lt;/td&gt;
&lt;td&gt;It often causes escape&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Limit closure usage over variables&lt;/td&gt;
&lt;td&gt;Closures capture outer variables which can escape&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Profile and test&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;-gcflags="-m"&lt;/code&gt; and memory profilers to inspect impact&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;p&gt;Escape analysis is one of those compiler-level features that silently affects your program's &lt;strong&gt;performance and memory efficiency&lt;/strong&gt;. As a developer, understanding this concept helps you make better decisions, especially in &lt;strong&gt;high-performance applications&lt;/strong&gt;, such as web servers, system tools, and large-scale data processing.&lt;/p&gt;

&lt;p&gt;By mastering escape analysis, you’ll write &lt;strong&gt;cleaner, faster, and more memory-efficient Go code&lt;/strong&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Slices in Go: A Deep Dive with Examples</title>
      <dc:creator>Md Abu Musa</dc:creator>
      <pubDate>Thu, 10 Apr 2025 12:23:35 +0000</pubDate>
      <link>https://dev.to/abstractmusa/slices-in-go-a-deep-dive-with-examples-1778</link>
      <guid>https://dev.to/abstractmusa/slices-in-go-a-deep-dive-with-examples-1778</guid>
      <description>&lt;p&gt;When writing Go programs, you’ll find that arrays are often too rigid to be practical. That’s where &lt;strong&gt;slices&lt;/strong&gt; come into play. Slices are Go’s built-in abstraction over arrays that offer flexibility, power, and performance.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;What slices are&lt;/li&gt;
&lt;li&gt;How they work internally&lt;/li&gt;
&lt;li&gt;How to create and use them&lt;/li&gt;
&lt;li&gt;Common pitfalls&lt;/li&gt;
&lt;li&gt;Best practices with examples&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 dynamically-sized, flexible view into the elements of an array. It doesn't store data itself — it points to an underlying array.&lt;/p&gt;

&lt;h3&gt;
  
  
  Slice Structure (Internally)
&lt;/h3&gt;

&lt;p&gt;A slice in Go is a small struct with 3 fields:&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;type&lt;/span&gt; &lt;span class="n"&gt;slice&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;ptr&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;   &lt;span class="c"&gt;// pointer to the underlying array&lt;/span&gt;
    &lt;span class="nb"&gt;len&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;  &lt;span class="c"&gt;// number of elements in the slice&lt;/span&gt;
    &lt;span class="nb"&gt;cap&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;  &lt;span class="c"&gt;// total capacity (from ptr to end of array)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✅ Creating Slices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. From an Array
&lt;/h3&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;5&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;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;slice&lt;/span&gt; &lt;span class="o"&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;1&lt;/span&gt;&lt;span class="o"&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;// [20 30 40]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;slice&lt;/code&gt; references the array &lt;code&gt;arr&lt;/code&gt; from index &lt;code&gt;1&lt;/code&gt; to &lt;code&gt;3&lt;/code&gt; (excluding index &lt;code&gt;4&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;len(slice)&lt;/code&gt; = 3&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cap(slice)&lt;/code&gt; = 4 (from index 1 to end of the array)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Using Slice Literal
&lt;/h3&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;p&gt;This creates both a slice and its underlying array.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Using &lt;code&gt;make()&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;s&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;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="c"&gt;// [0 0 0]&lt;/span&gt;
&lt;span class="n"&gt;s&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;3&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="c"&gt;// len=3, cap=5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔁 Slicing a 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;data&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;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;400&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;sub&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c"&gt;// [200 300]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This sub-slice shares memory with the original slice. Changing &lt;code&gt;sub&lt;/code&gt; affects &lt;code&gt;data&lt;/code&gt;:&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;sub&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;999&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;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// [100 999 300 400]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ➕ Appending Elements
&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;nums&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="n"&gt;nums&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;nums&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="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// [1 2 3 4]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the slice’s capacity is full, Go automatically allocates a new underlying array.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ Shared Memory Behavior
&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="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="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;s1&lt;/span&gt; &lt;span class="o"&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;0&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;    &lt;span class="c"&gt;// [1 2]&lt;/span&gt;
&lt;span class="n"&gt;s2&lt;/span&gt; &lt;span class="o"&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;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;    &lt;span class="c"&gt;// [2 3]&lt;/span&gt;

&lt;span class="n"&gt;s1&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="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;999&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;arr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// [1 999 3 4]&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;s2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;// [999 3]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tip:
&lt;/h3&gt;

&lt;p&gt;To avoid this, use &lt;code&gt;copy()&lt;/code&gt;:&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;original&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;clone&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="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;original&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nb"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;original&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📈 Capacity Growth with &lt;code&gt;append()&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Go typically &lt;strong&gt;doubles the capacity&lt;/strong&gt; when appending exceeds the current capacity.&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;s&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;0&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="n"&gt;s&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;s&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;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;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// [1 2 3]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the capacity is exceeded, a new array is allocated behind the scenes.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Built-in Functions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;len(slice)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Returns number of elements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cap(slice)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Returns total capacity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;append(slice, elems...)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Appends elements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;copy(dst, src)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Copies elements&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🧪 Complete Example
&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;original&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;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;slice1&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;original&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="m"&gt;4&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;"Slice1:"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;slice1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// [20 30 40]&lt;/span&gt;

    &lt;span class="n"&gt;slice2&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;slice1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;99&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;"Original:"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;original&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;"Slice2:"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;slice2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;slice1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;777&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;"Modified Slice1:"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;slice1&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;"Modified Original:"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;original&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;
  
  
  Output (May vary based on capacity reuse):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Slice1: [20 30 40]
Original: [10 20 30 40 99]
Slice2: [20 30 40 99]
Modified Slice1: [777 30 40]
Modified Original: [10 777 30 40 99]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;h3&gt;
  
  
  🔹 Assuming slices are independent:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="n"&gt;a&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;b&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;999&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;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// [999 2 3]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;copy()&lt;/code&gt; to truly clone a slice.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔹 Forgetting that &lt;code&gt;append()&lt;/code&gt; might create a new array
&lt;/h3&gt;

&lt;p&gt;Always check whether your slice is still pointing to the original memory if you rely on shared behavior.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use slices for most collections — they’re more idiomatic and dynamic than arrays.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;copy()&lt;/code&gt; when independence is needed.&lt;/li&gt;
&lt;li&gt;Avoid unnecessary slicing inside performance-critical loops.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;make([]T, len, cap)&lt;/code&gt; if you know the size ahead of time.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Summary
&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;Memory Sharing&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Append Support&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Preferred Use&lt;/td&gt;
&lt;td&gt;Rare&lt;/td&gt;
&lt;td&gt;Always&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;p&gt;Slices are a cornerstone of Go’s design, combining performance with flexibility. Understanding how slices share memory with arrays, grow, and interact with built-in functions is essential for writing idiomatic and safe Go code.&lt;/p&gt;

&lt;p&gt;Once you master slices, you’ll write cleaner, more efficient programs — and avoid some tricky bugs!&lt;/p&gt;

</description>
      <category>go</category>
      <category>programming</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Mastering Pointers in Go: A Complete Beginner-to-Advanced Guide</title>
      <dc:creator>Md Abu Musa</dc:creator>
      <pubDate>Tue, 08 Apr 2025 00:38:30 +0000</pubDate>
      <link>https://dev.to/abstractmusa/mastering-pointers-in-go-a-complete-beginner-to-advanced-guide-213b</link>
      <guid>https://dev.to/abstractmusa/mastering-pointers-in-go-a-complete-beginner-to-advanced-guide-213b</guid>
      <description>&lt;p&gt;&lt;strong&gt;Go (Golang)&lt;/strong&gt; is a powerful, statically typed language built for simplicity, performance, and scalability. One of the key features that sets Go apart from many high-level languages is its support for &lt;strong&gt;pointers&lt;/strong&gt;, which allow you to directly reference memory addresses.&lt;/p&gt;

&lt;p&gt;In this blog, you’ll learn everything you need to know about pointers in Go — from what they are and why they matter, to how they’re used in real-world applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  📌 What is a Pointer?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;pointer&lt;/strong&gt; is a variable that holds the &lt;strong&gt;memory address&lt;/strong&gt; of another variable.&lt;/p&gt;

&lt;h3&gt;
  
  
  👉 Analogy:
&lt;/h3&gt;

&lt;p&gt;Think of a variable as a house and its value as a person living inside. A pointer is like the house’s &lt;strong&gt;address&lt;/strong&gt; written on a note. You don’t carry the person — you carry the address.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Basic Pointer Syntax 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;var&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;x&lt;/code&gt; is an &lt;code&gt;int&lt;/code&gt; variable.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;amp;x&lt;/code&gt; gives the &lt;strong&gt;memory address&lt;/strong&gt; of &lt;code&gt;x&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;p&lt;/code&gt; is a &lt;strong&gt;pointer to int&lt;/strong&gt; (&lt;code&gt;*int&lt;/code&gt;) that stores that address.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔍 Dereferencing
&lt;/h3&gt;

&lt;p&gt;To &lt;strong&gt;get the value&lt;/strong&gt; stored at the pointer address:&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;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="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// Output: 10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚙️ Why Use Pointers?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🔁 &lt;strong&gt;Avoid copying large values&lt;/strong&gt; (performance gain).&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;Modify values&lt;/strong&gt; inside functions.&lt;/li&gt;
&lt;li&gt;⚒️ &lt;strong&gt;Work with dynamic data structures&lt;/strong&gt; (like linked lists, trees).&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Share state between functions or goroutines.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧑‍💻 Example: Modify Value via Pointer
&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;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;val&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kt"&gt;int&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;val&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;99&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;num&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;
    &lt;span class="n"&gt;update&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;num&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;num&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// Output: 99&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ &lt;code&gt;*val = 99&lt;/code&gt; changes the original &lt;code&gt;num&lt;/code&gt; since we're working with its memory address.&lt;/p&gt;




&lt;h2&gt;
  
  
  🆚 Value vs Pointer
&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;Value (Copy)&lt;/th&gt;
&lt;th&gt;Pointer (Reference)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Memory usage&lt;/td&gt;
&lt;td&gt;More (copies value)&lt;/td&gt;
&lt;td&gt;Less (copies address)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modify original?&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Slower with large data&lt;/td&gt;
&lt;td&gt;Faster&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🆕 The &lt;code&gt;new()&lt;/code&gt; Keyword
&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;ptr&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="nb"&gt;new&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="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;77&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="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;ptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// Output: 77&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;new(int)&lt;/code&gt; allocates memory for an &lt;code&gt;int&lt;/code&gt; and returns a pointer to it.&lt;/li&gt;
&lt;li&gt;The pointer’s default value is zero.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  👤 Pointers with Structs
&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;Name&lt;/span&gt; &lt;span class="kt"&gt;string&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;rename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="o"&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;u&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Alice"&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;user&lt;/span&gt; &lt;span class="o"&gt;:=&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;Name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Bob"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;rename&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;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;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="c"&gt;// Output: Alice&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Modifications inside the function persist outside because we pass a pointer.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Common Pitfalls
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;❌ &lt;strong&gt;Dereferencing a nil pointer&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;   &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="kt"&gt;int&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="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// panic: runtime error: invalid memory address&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;✅ Always check for &lt;code&gt;nil&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;p&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;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="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;p&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;
  
  
  🔄 Passing by Value vs Pointer (Recap)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Use Pointer?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Modify original data&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pass large structs&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read-only small values&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🔚 Conclusion
&lt;/h2&gt;

&lt;p&gt;Pointers are a &lt;strong&gt;core concept&lt;/strong&gt; in Go that unlock &lt;strong&gt;performance&lt;/strong&gt;, &lt;strong&gt;control&lt;/strong&gt;, and &lt;strong&gt;flexibility&lt;/strong&gt;. By mastering pointers, you gain a deeper understanding of how data flows and memory works under the hood — critical skills for any serious Go developer.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;✨ &lt;strong&gt;Remember:&lt;/strong&gt; With great power (pointers), comes great responsibility (memory safety)!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>go</category>
      <category>programming</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Webhook vs API: Key Differences and Use Cases</title>
      <dc:creator>Md Abu Musa</dc:creator>
      <pubDate>Wed, 05 Mar 2025 14:57:29 +0000</pubDate>
      <link>https://dev.to/abstractmusa/webhook-vs-api-key-differences-and-use-cases-3fno</link>
      <guid>https://dev.to/abstractmusa/webhook-vs-api-key-differences-and-use-cases-3fno</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In modern web development, communication between different systems and services is essential. Two common methods for this are &lt;strong&gt;Webhooks&lt;/strong&gt; and &lt;strong&gt;APIs&lt;/strong&gt;. While both enable data exchange, they function differently. In this blog, we'll explore their differences, working mechanisms, and real-world use cases.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is an API?
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;API (Application Programming Interface)&lt;/strong&gt; is a request-response mechanism where a client &lt;strong&gt;requests&lt;/strong&gt; data from a server, and the server &lt;strong&gt;responds&lt;/strong&gt; with the requested data. This means that the client (e.g., a web app or mobile app) must explicitly &lt;strong&gt;ask&lt;/strong&gt; for information whenever needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How API Works (Pull-Based Communication)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;The client sends a request (e.g., HTTP GET or POST) to the server.&lt;/li&gt;
&lt;li&gt;The server processes the request and returns a response.&lt;/li&gt;
&lt;li&gt;The client receives the response and processes the data.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Example of API&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Consider a weather application that fetches real-time weather data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The app sends an API request to a weather service (e.g., OpenWeather API) asking for the weather in New York.&lt;/li&gt;
&lt;li&gt;The server processes the request and responds with data like temperature, humidity, and conditions.&lt;/li&gt;
&lt;li&gt;The app displays this information to the user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📌 &lt;strong&gt;Key Takeaway:&lt;/strong&gt; APIs work in a &lt;strong&gt;request-driven (pull-based)&lt;/strong&gt; manner, meaning data is retrieved only when the client requests it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is a Webhook?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Webhook&lt;/strong&gt; is an event-driven mechanism where the server &lt;strong&gt;automatically sends&lt;/strong&gt; data to a predefined URL when a specific event occurs. Instead of the client making requests repeatedly, the server pushes data in real-time whenever an event happens.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How Webhooks Work (Push-Based Communication)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;The client registers a webhook URL with the server.&lt;/li&gt;
&lt;li&gt;When an event occurs (e.g., payment success, order placed), the server &lt;strong&gt;automatically sends&lt;/strong&gt; (pushes) the data to the webhook URL.&lt;/li&gt;
&lt;li&gt;The client receives and processes the data instantly.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Example of Webhook&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Imagine an e-commerce website integrated with a payment gateway (e.g., Stripe or PayPal).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A customer makes a successful payment.&lt;/li&gt;
&lt;li&gt;Stripe &lt;strong&gt;automatically sends&lt;/strong&gt; a webhook notification to the e-commerce system with transaction details.&lt;/li&gt;
&lt;li&gt;The system processes the payment and updates the order status.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📌 &lt;strong&gt;Key Takeaway:&lt;/strong&gt; Webhooks work in an &lt;strong&gt;event-driven (push-based)&lt;/strong&gt; manner, meaning data is sent &lt;strong&gt;automatically&lt;/strong&gt; when an event occurs.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Key Differences Between Webhook and API&lt;/strong&gt;
&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;API&lt;/th&gt;
&lt;th&gt;Webhook&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Trigger Mechanism&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Client requests data&lt;/td&gt;
&lt;td&gt;Server pushes data automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Communication Type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Request-response (Pull)&lt;/td&gt;
&lt;td&gt;Event-driven (Push)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Efficiency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires periodic polling&lt;/td&gt;
&lt;td&gt;More efficient, as data is sent only when needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Real-time Updates&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Not real-time unless polling is frequent&lt;/td&gt;
&lt;td&gt;Real-time notifications&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Use Case Example&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fetching weather data&lt;/td&gt;
&lt;td&gt;Getting a notification when a payment is completed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;When to Use API vs Webhook?&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Use API When:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;✔️ You need &lt;strong&gt;on-demand data&lt;/strong&gt; (e.g., fetching user details, retrieving reports).&lt;br&gt;&lt;br&gt;
✔️ The client decides &lt;strong&gt;when&lt;/strong&gt; to request information.&lt;br&gt;&lt;br&gt;
✔️ You want more &lt;strong&gt;control over requests and responses&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Example:&lt;/strong&gt; A user logs into an app, and the system fetches their profile data via API.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Use Webhooks When:&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;✔️ You need &lt;strong&gt;real-time updates&lt;/strong&gt; (e.g., receiving notifications on status changes).&lt;br&gt;&lt;br&gt;
✔️ You want to &lt;strong&gt;avoid continuous polling&lt;/strong&gt; to reduce API load.&lt;br&gt;&lt;br&gt;
✔️ The event occurs &lt;strong&gt;outside the client’s control&lt;/strong&gt; (e.g., payment confirmations, new GitHub commits).  &lt;/p&gt;

&lt;p&gt;📌 &lt;strong&gt;Example:&lt;/strong&gt; A payment gateway (Stripe) sends a webhook when a payment is successful.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Combining API and Webhooks&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In some cases, using &lt;strong&gt;both API and Webhooks&lt;/strong&gt; together provides the best solution.&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;Example:&lt;/strong&gt; A food delivery app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses &lt;strong&gt;API&lt;/strong&gt; to fetch restaurant menus when the user opens the app.&lt;/li&gt;
&lt;li&gt;Uses &lt;strong&gt;Webhooks&lt;/strong&gt; to notify the user when the food is out for delivery.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Both &lt;strong&gt;APIs and Webhooks&lt;/strong&gt; play vital roles in modern applications. The choice between them depends on whether you need &lt;strong&gt;real-time event-driven updates (Webhooks)&lt;/strong&gt; or &lt;strong&gt;on-demand request-response interactions (API)&lt;/strong&gt;. Understanding their differences helps developers build more efficient and scalable systems.&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;Pro Tip:&lt;/strong&gt; If your system requires frequent updates but you don’t want to overload it with API requests, consider using Webhooks for real-time notifications and APIs for fetching additional data when needed.&lt;/p&gt;

</description>
      <category>api</category>
      <category>webhook</category>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Understanding Higher-Order Functions in Go</title>
      <dc:creator>Md Abu Musa</dc:creator>
      <pubDate>Tue, 25 Feb 2025 01:07:15 +0000</pubDate>
      <link>https://dev.to/abstractmusa/understanding-higher-order-functions-in-go-5ek2</link>
      <guid>https://dev.to/abstractmusa/understanding-higher-order-functions-in-go-5ek2</guid>
      <description>&lt;h4&gt;
  
  
  &lt;strong&gt;What is a Higher-Order Function?&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;A &lt;strong&gt;Higher-Order Function (HOF)&lt;/strong&gt; is a function that &lt;strong&gt;either takes another function as an argument or returns a function&lt;/strong&gt; as its result.  &lt;/p&gt;

&lt;p&gt;This makes functions in Go more flexible and powerful by enabling concepts like &lt;strong&gt;callbacks, function composition, and functional programming patterns&lt;/strong&gt;.  &lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Characteristics of Higher-Order Functions&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;✅ &lt;strong&gt;Takes a function as an argument&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Returns a function as a result&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Enhances code reusability and modularity&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Common in functional programming patterns&lt;/strong&gt;  &lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;Examples of Higher-Order Functions in Go&lt;/strong&gt;
&lt;/h3&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;1️⃣ Passing a Function as an Argument&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;A function that &lt;strong&gt;accepts another function as a parameter&lt;/strong&gt; and applies it to two integers.&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"fmt"&lt;/span&gt;

&lt;span class="c"&gt;// Higher-order function: Takes a function as an argument&lt;/span&gt;
&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;operate&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="n"&gt;op&lt;/span&gt; &lt;span class="k"&gt;func&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="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="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;op&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;// Function to add two numbers&lt;/span&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;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&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;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;y&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;result&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;operate&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="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&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;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;"Result:"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// Output: Result: 9&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ &lt;strong&gt;Why Higher-Order?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;operate&lt;/code&gt; takes another function (&lt;code&gt;op&lt;/code&gt;) as an argument.
&lt;/li&gt;
&lt;li&gt;This makes &lt;code&gt;operate&lt;/code&gt; flexible, as it can apply different functions like &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;subtract&lt;/code&gt;, &lt;code&gt;multiply&lt;/code&gt;, etc.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  &lt;strong&gt;2️⃣ Returning a Function from Another Function&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;A function that &lt;strong&gt;returns another function&lt;/strong&gt; instead of a direct value.&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"fmt"&lt;/span&gt;

&lt;span class="c"&gt;// Higher-order function: Returns a function&lt;/span&gt;
&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;multiplier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;factor&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;func&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="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="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&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;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;factor&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;double&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;multiplier&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="c"&gt;// double now holds a function that multiplies by 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="n"&gt;double&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="c"&gt;// Output: 10&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ &lt;strong&gt;Why Higher-Order?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;multiplier(2)&lt;/code&gt; returns a function that multiplies any number by 2.
&lt;/li&gt;
&lt;li&gt;The returned function is stored in &lt;code&gt;double&lt;/code&gt;, which can be used later.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  &lt;strong&gt;3️⃣ Using Anonymous Functions in Higher-Order Functions&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Instead of defining a separate function, we can pass an &lt;strong&gt;anonymous function&lt;/strong&gt; directly.&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"fmt"&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;operate&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="n"&gt;op&lt;/span&gt; &lt;span class="k"&gt;func&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="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="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;op&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&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;result&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;operate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10&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="k"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&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;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;y&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;"Result:"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c"&gt;// Output: Result: 7&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ &lt;strong&gt;Why Higher-Order?&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;operate&lt;/code&gt; function takes an &lt;strong&gt;anonymous function&lt;/strong&gt; as a parameter.
&lt;/li&gt;
&lt;li&gt;No need to define a separate function like &lt;code&gt;subtract&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;First-Order vs. Higher-Order Functions&lt;/strong&gt;
&lt;/h3&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;&lt;strong&gt;First-Order Function&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Higher-Order Function&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Accepts another function?&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Returns another function?&lt;/td&gt;
&lt;td&gt;❌ No&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Example&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sumArray([]int)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;operate(4, 2, func(x, y int) int { return x * y })&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;When to Use Higher-Order Functions?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;✅ When writing &lt;strong&gt;generic, reusable functions&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ When using &lt;strong&gt;callbacks or function composition&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ When implementing &lt;strong&gt;custom sorting, filtering, or mapping operations&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ When applying &lt;strong&gt;functional programming patterns&lt;/strong&gt;  &lt;/p&gt;

</description>
      <category>go</category>
      <category>softwareengineering</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
