<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Go on Hi, I&#39;m Muhammad Amal</title>
    <link>https://muhammadamal.my.id/tags/go/</link>
    <description>Recent content in Go on Hi, I&#39;m Muhammad Amal</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 07 Jul 2025 09:00:00 +0700</lastBuildDate>
    <atom:link href="https://muhammadamal.my.id/tags/go/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>gRPC Deep Dive in 2025, Patterns for High Throughput Services</title>
      <link>https://muhammadamal.my.id/blog/grpc-deep-dive-2025-high-throughput-patterns/</link>
      <pubDate>Mon, 07 Jul 2025 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/grpc-deep-dive-2025-high-throughput-patterns/</guid>
      <description>What still trips people up about gRPC in 2025, and the production patterns that actually move the needle.</description>
    </item>
    <item>
      <title>Real Time Telemetry Processing in Go 1.24, A Hands On Tutorial</title>
      <link>https://muhammadamal.my.id/blog/real-time-telemetry-processing-go-1-24-tutorial/</link>
      <pubDate>Wed, 09 Apr 2025 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/real-time-telemetry-processing-go-1-24-tutorial/</guid>
      <description>A practical Go 1.24 telemetry pipeline. Channels with backpressure, the new map internals, generic ring buffers, and a sliding window aggregator that holds up under load.</description>
    </item>
    <item>
      <title>OpenAPI First API Design in Go, oapi-codegen in 2024</title>
      <link>https://muhammadamal.my.id/blog/openapi-first-go-oapi-codegen/</link>
      <pubDate>Mon, 22 Jul 2024 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/openapi-first-go-oapi-codegen/</guid>
      <description>How I run an OpenAPI-first workflow with oapi-codegen 2.x in Go 1.22, including schema patterns and CI discipline that keeps spec and code aligned.</description>
    </item>
    <item>
      <title>Securing Go Microservices with JWT, Patterns That Hold Up</title>
      <link>https://muhammadamal.my.id/blog/securing-go-microservices-jwt/</link>
      <pubDate>Wed, 10 Jul 2024 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/securing-go-microservices-jwt/</guid>
      <description>Production JWT patterns for Go microservices in 2024 using golang-jwt v5, covering signing, validation, and context plumbing.</description>
    </item>
    <item>
      <title>gRPC for Internal Services in Go, A buf Powered Workflow</title>
      <link>https://muhammadamal.my.id/blog/grpc-internal-services-go-buf/</link>
      <pubDate>Mon, 08 Jul 2024 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/grpc-internal-services-go-buf/</guid>
      <description>How I wire up gRPC for internal Go services in 2024 with buf CLI 1.34, lint rules, and breaking change detection.</description>
    </item>
    <item>
      <title>Repository Pattern Done Right in PHP and Go, A Decade of Mistakes Distilled</title>
      <link>https://muhammadamal.my.id/blog/repository-pattern-done-right-php-and-go/</link>
      <pubDate>Thu, 26 Oct 2023 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/repository-pattern-done-right-php-and-go/</guid>
      <description>The repository pattern, demystified. When to use it, when not to, and the specific mistakes I made over ten years. Real examples in PHP 8.2 and Go 1.21.</description>
    </item>
    <item>
      <title>Ports and Adapters in Go 1.21 with Wire and uber-go/fx</title>
      <link>https://muhammadamal.my.id/blog/ports-and-adapters-in-go-with-wire-and-fx/</link>
      <pubDate>Thu, 12 Oct 2023 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/ports-and-adapters-in-go-with-wire-and-fx/</guid>
      <description>Hexagonal architecture in idiomatic Go 1.21. When to use Wire, when to use fx, and when to just write the wiring by hand. With production-tested patterns.</description>
    </item>
    <item>
      <title>Hexagonal Architecture Explained for PHP and Go Developers</title>
      <link>https://muhammadamal.my.id/blog/hexagonal-architecture-explained-for-php-and-go-devs/</link>
      <pubDate>Mon, 09 Oct 2023 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/hexagonal-architecture-explained-for-php-and-go-devs/</guid>
      <description>Hexagonal architecture, ports and adapters, explained without the dogma. With concrete PHP 8.2 and Go 1.21 code, and the parts I think Cockburn got right.</description>
    </item>
    <item>
      <title>Building an ETL Pipeline in Go</title>
      <link>https://muhammadamal.my.id/blog/go-etl-pipeline/</link>
      <pubDate>Wed, 12 Oct 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/go-etl-pipeline/</guid>
      <description>Go ETL: pgx, COPY bulk, concurrent ETL stages. When Go beats Python.</description>
    </item>
    <item>
      <title>Why Lightweight ETL Beats Big Data Tools for Most Teams</title>
      <link>https://muhammadamal.my.id/blog/lightweight-etl-vs-big-data/</link>
      <pubDate>Mon, 03 Oct 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/lightweight-etl-vs-big-data/</guid>
      <description>Lightweight ETL: Python/Go beats Spark/Airflow for most teams. When &amp;lsquo;big data&amp;rsquo; is overkill.</description>
    </item>
    <item>
      <title>Instrumenting Go Services for Prometheus</title>
      <link>https://muhammadamal.my.id/blog/go-prometheus-instrumentation/</link>
      <pubDate>Wed, 07 Sep 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/go-prometheus-instrumentation/</guid>
      <description>Go + Prometheus: client_golang, counters, histograms, HTTP middleware, runtime metrics.</description>
    </item>
    <item>
      <title>Reading Sensors from Go on the Edge</title>
      <link>https://muhammadamal.my.id/blog/go-sensor-reader-edge/</link>
      <pubDate>Fri, 12 Aug 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/go-sensor-reader-edge/</guid>
      <description>Go edge service: read sensors, publish to MQTT, handle disconnects. Working code.</description>
    </item>
    <item>
      <title>June Retro, Clean Architecture in Practice</title>
      <link>https://muhammadamal.my.id/blog/june-retro-clean-architecture/</link>
      <pubDate>Wed, 29 Jun 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/june-retro-clean-architecture/</guid>
      <description>June retro: Clean Arch in Go + Laravel. Where it paid off, where it overkilled.</description>
    </item>
    <item>
      <title>Testing Clean Architecture, Unit, Use Case, Integration</title>
      <link>https://muhammadamal.my.id/blog/clean-architecture-testing/</link>
      <pubDate>Mon, 27 Jun 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/clean-architecture-testing/</guid>
      <description>Test strategy for Clean Architecture: pure unit (domain), fast use case (fakes), integration (adapters).</description>
    </item>
    <item>
      <title>Adapters in Go, HTTP, gRPC, and Worker Patterns</title>
      <link>https://muhammadamal.my.id/blog/go-adapter-pattern/</link>
      <pubDate>Fri, 17 Jun 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/go-adapter-pattern/</guid>
      <description>Adapters in Go: HTTP, gRPC, workers. Translate between transport DTOs and use cases. Frameworks at edges.</description>
    </item>
    <item>
      <title>Use Cases in Go, Coordinating Domain Logic</title>
      <link>https://muhammadamal.my.id/blog/go-use-case-pattern/</link>
      <pubDate>Wed, 15 Jun 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/go-use-case-pattern/</guid>
      <description>Use cases in Go: one per operation, DTOs, dependency wiring, fast unit tests.</description>
    </item>
    <item>
      <title>Repositories and Interfaces in Go</title>
      <link>https://muhammadamal.my.id/blog/go-repository-pattern/</link>
      <pubDate>Mon, 13 Jun 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/go-repository-pattern/</guid>
      <description>Repository pattern in Go. Ports in use-case layer, Postgres implementations, transactions.</description>
    </item>
    <item>
      <title>Domain-Driven Entities in Go</title>
      <link>https://muhammadamal.my.id/blog/go-domain-entities/</link>
      <pubDate>Fri, 10 Jun 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/go-domain-entities/</guid>
      <description>Domain entities in Go: identity, invariants, constructors, value objects. Keep business logic out of frameworks.</description>
    </item>
    <item>
      <title>Dependency Injection in Go Without a Framework</title>
      <link>https://muhammadamal.my.id/blog/go-dependency-injection-no-framework/</link>
      <pubDate>Wed, 08 Jun 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/go-dependency-injection-no-framework/</guid>
      <description>Go DI without a framework. Constructor injection, interfaces, manual wire, when google/wire earns it.</description>
    </item>
    <item>
      <title>Clean Architecture in Go, Project Layout</title>
      <link>https://muhammadamal.my.id/blog/clean-architecture-go-layout/</link>
      <pubDate>Mon, 06 Jun 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/clean-architecture-go-layout/</guid>
      <description>Pragmatic Go layout for Clean Architecture. Folders, package boundaries, naming, Go-native patterns.</description>
    </item>
    <item>
      <title>Why I&#39;m Trying Clean Architecture in 2022</title>
      <link>https://muhammadamal.my.id/blog/why-clean-architecture-in-2022/</link>
      <pubDate>Wed, 01 Jun 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/why-clean-architecture-in-2022/</guid>
      <description>Clean Architecture in 2022: why now, what it buys, what it costs. Pragmatic take.</description>
    </item>
    <item>
      <title>Rust vs Go for Backend APIs, When Each One Wins</title>
      <link>https://muhammadamal.my.id/blog/rust-vs-go-backend-api/</link>
      <pubDate>Mon, 28 Mar 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/rust-vs-go-backend-api/</guid>
      <description>Rust vs Go for backend APIs in 2022. Compile times, perf, ergonomics, ecosystem, hiring. Honest after shipping both.</description>
    </item>
    <item>
      <title>Rust Ownership and Borrowing for People Who Already Know Pointers</title>
      <link>https://muhammadamal.my.id/blog/rust-ownership-borrowing-for-go-devs/</link>
      <pubDate>Fri, 04 Mar 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/rust-ownership-borrowing-for-go-devs/</guid>
      <description>Rust ownership for people who know pointers. Move semantics, &amp;amp;T vs &amp;amp;mut T, three rules, patterns that click.</description>
    </item>
    <item>
      <title>Why I&#39;m Learning Rust in 2022 (as a Go Developer)</title>
      <link>https://muhammadamal.my.id/blog/why-learn-rust-in-2022/</link>
      <pubDate>Wed, 02 Mar 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/why-learn-rust-in-2022/</guid>
      <description>A Go dev picks up Rust in 2022. Where it wins, where it doesn&amp;rsquo;t, and what the first month feels like.</description>
    </item>
    <item>
      <title>GitHub Actions for Go Monorepos, A 2022 Setup</title>
      <link>https://muhammadamal.my.id/blog/github-actions-go-monorepo/</link>
      <pubDate>Mon, 21 Feb 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/github-actions-go-monorepo/</guid>
      <description>GitHub Actions for Go monorepos. Path filters, module cache, golangci-lint, race tests, sub-3-min CI.</description>
    </item>
    <item>
      <title>Containerizing a Go Service, A Sub-15MB Production Image</title>
      <link>https://muhammadamal.my.id/blog/go-docker-image-small-distroless/</link>
      <pubDate>Wed, 26 Jan 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/go-docker-image-small-distroless/</guid>
      <description>Shipping a Go service in 14 MB with distroless + static linking + Buildx. Full Dockerfile, CVE wins, CI cache wins.</description>
    </item>
    <item>
      <title>Health Checks and Graceful Shutdown in Go Web Services</title>
      <link>https://muhammadamal.my.id/blog/go-graceful-shutdown-health-checks/</link>
      <pubDate>Mon, 24 Jan 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/go-graceful-shutdown-health-checks/</guid>
      <description>Liveness vs readiness, signal handling, draining in-flight requests. The Go shutdown pattern that plays nice with Kubernetes.</description>
    </item>
    <item>
      <title>Structured Logging in Go Microservices with Zap</title>
      <link>https://muhammadamal.my.id/blog/go-structured-logging-zap/</link>
      <pubDate>Fri, 21 Jan 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/go-structured-logging-zap/</guid>
      <description>Structured logging in Go with zap. JSON output, request-scoped fields, sampling, and the pattern that survives production.</description>
    </item>
    <item>
      <title>Configuration Management for Go Services, Viper, Env, or Just Flags?</title>
      <link>https://muhammadamal.my.id/blog/go-config-management-viper-env-flags/</link>
      <pubDate>Wed, 19 Jan 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/go-config-management-viper-env-flags/</guid>
      <description>Viper vs env vars vs flags for Go services. Trade-offs, the boring default that wins, and a 60-line loader you can copy-paste.</description>
    </item>
    <item>
      <title>Communicating Between Go Microservices, REST vs gRPC in 2022</title>
      <link>https://muhammadamal.my.id/blog/grpc-vs-rest-go-microservices/</link>
      <pubDate>Fri, 14 Jan 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/grpc-vs-rest-go-microservices/</guid>
      <description>REST vs gRPC for Go microservices. Real benchmarks, ergonomics, the hidden cost of HTTP/JSON at scale, and what we picked for billing.</description>
    </item>
    <item>
      <title>From Monolith to First Go Microservice, A Pragmatic Cutover</title>
      <link>https://muhammadamal.my.id/blog/monolith-to-first-go-microservice/</link>
      <pubDate>Mon, 10 Jan 2022 09:00:00 +0700</pubDate>
      <guid>https://muhammadamal.my.id/blog/monolith-to-first-go-microservice/</guid>
      <description>Carving the first Go microservice out of a PHP monolith. Pragmatic cutover, traffic shadowing, and the boring service to start with.</description>
    </item>
  </channel>
</rss>
