<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Golang on Dev &amp; Platform Engineering Hub</title><link>https://rhidayat.work/topics/golang/</link><description>Recent content in Golang on Dev &amp; Platform Engineering Hub</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Rachmat Hidayat</copyright><lastBuildDate>Sun, 09 Aug 2026 19:30:00 +0000</lastBuildDate><atom:link href="https://rhidayat.work/topics/golang/index.xml" rel="self" type="application/rss+xml"/><item><title>Crossplane Ep 14: Custom Composition Webhooks</title><link>https://rhidayat.work/series/crossplane/advanced/14-custom-composition-webhooks/</link><pubDate>Sun, 09 Aug 2026 19:30:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/advanced/14-custom-composition-webhooks/</guid><description>OpenAPI schema validation (like &lt;code&gt;type: integer&lt;/code&gt;) is too basic for enterprise security. What if you need to enforce that a database&amp;rsquo;s storage size is an even number, or that the requested environment matches a specific regex? In this episode, we write a Kubernetes Validating Webhook in Go to intercept and inspect Crossplane Claims.</description></item><item><title>Crossplane Ep 11: Writing Composition Functions in Go</title><link>https://rhidayat.work/series/crossplane/advanced/11-writing-composition-functions-in-go/</link><pubDate>Sun, 09 Aug 2026 19:00:00 +0000</pubDate><guid>https://rhidayat.work/series/crossplane/advanced/11-writing-composition-functions-in-go/</guid><description>In Episode 10, we learned that Composition Functions allow us to escape the limitations of YAML. In this episode, we will write a custom Go program that dynamically generates an array of AWS Subnets based on a single integer provided by the Application Developer.</description></item><item><title>Terraform Ep 15: Infrastructure Unit Testing with Terratest (Golang)</title><link>https://rhidayat.work/series/terraform/advanced/15-testing-with-terratest/</link><pubDate>Sun, 09 Aug 2026 11:40:00 +0000</pubDate><guid>https://rhidayat.work/series/terraform/advanced/15-testing-with-terratest/</guid><description>Running &amp;rsquo;terraform plan&amp;rsquo; is not enough to guarantee your infrastructure works. In this final episode, we bridge the gap between DevOps and Software Engineering by writing automated Golang tests using Terratest. We will programmatically provision infrastructure, assert its correctness, and tear it down.</description></item><item><title>Go Ep 15: Building a Production REST API</title><link>https://rhidayat.work/series/go/15-building-a-production-rest-api/</link><pubDate>Sun, 09 Aug 2026 10:20:00 +0000</pubDate><guid>https://rhidayat.work/series/go/15-building-a-production-rest-api/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Theory is useless without execution. We assemble everything learned across 14 episodes — structs, pointers, error handling, JSON codecs, context timeouts, and concurrency — into a production-grade HTTP REST API.
&lt;/div&gt;</description></item><item><title>Go Ep 14: Testing, Benchmarking &amp; Fuzzing</title><link>https://rhidayat.work/series/go/14-unit-testing-benchmarking-fuzzing/</link><pubDate>Sun, 09 Aug 2026 10:10:00 +0000</pubDate><guid>https://rhidayat.work/series/go/14-unit-testing-benchmarking-fuzzing/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Go includes a first-class test runner built into the &lt;code&gt;go test&lt;/code&gt; CLI. You don&amp;rsquo;t need external test frameworks like Jest or JUnit to write unit tests, benchmarks, or fuzzers.
&lt;/div&gt;</description></item><item><title>Go Ep 13: Generics (Type Parameters)</title><link>https://rhidayat.work/series/go/13-generics-in-go/</link><pubDate>Sun, 09 Aug 2026 10:00:00 +0000</pubDate><guid>https://rhidayat.work/series/go/13-generics-in-go/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Before Go 1.18, writing a reusable function for finding a slice element required duplicate functions for &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;string&lt;/code&gt;, and &lt;code&gt;float64&lt;/code&gt;, or using reflection. &lt;strong&gt;Generics&lt;/strong&gt; solve this using Type Parameters.
&lt;/div&gt;</description></item><item><title>Go Ep 12: Context, Cancellation &amp; Timeouts</title><link>https://rhidayat.work/series/go/12-context-cancellation-and-timeouts/</link><pubDate>Sun, 09 Aug 2026 09:50:00 +0000</pubDate><guid>https://rhidayat.work/series/go/12-context-cancellation-and-timeouts/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 When an incoming HTTP request is cancelled by the client, every downstream database query and RPC call associated with that request must stop immediately. Go&amp;rsquo;s &lt;strong&gt;&lt;code&gt;context.Context&lt;/code&gt;&lt;/strong&gt; enforces this cancellation propagation.
&lt;/div&gt;</description></item><item><title>Go Ep 11: Advanced Concurrency &amp; Worker Pools</title><link>https://rhidayat.work/series/go/11-advanced-concurrency-patterns/</link><pubDate>Sun, 09 Aug 2026 09:40:00 +0000</pubDate><guid>https://rhidayat.work/series/go/11-advanced-concurrency-patterns/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Channel communication handles message passing, but shared memory synchronization requires standard primitives like &lt;code&gt;sync.Mutex&lt;/code&gt; and &lt;code&gt;sync.WaitGroup&lt;/code&gt;. Learn how to build thread-safe concurrent systems.
&lt;/div&gt;</description></item><item><title>Go Ep 10: Goroutines &amp; Channel Basics</title><link>https://rhidayat.work/series/go/10-goroutines-and-channels-basics/</link><pubDate>Sun, 09 Aug 2026 09:30:00 +0000</pubDate><guid>https://rhidayat.work/series/go/10-goroutines-and-channels-basics/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Do not communicate by sharing memory; instead, share memory by communicating. Goroutines and Channels form the core primitives of Go&amp;rsquo;s concurrency model.
&lt;/div&gt;</description></item><item><title>Go Ep 9: Implicit Interfaces &amp; Polymorphism</title><link>https://rhidayat.work/series/go/09-interfaces-and-polymorphism/</link><pubDate>Sun, 09 Aug 2026 09:10:00 +0000</pubDate><guid>https://rhidayat.work/series/go/09-interfaces-and-polymorphism/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 If it walks like a duck and quacks like a duck, Go treats it like a duck. Interfaces in Go are satisfied implicitly, creating loose coupling and high testability across packages.
&lt;/div&gt;</description></item><item><title>Go Ep 8: Methods &amp; Struct Composition</title><link>https://rhidayat.work/series/go/08-methods-and-struct-embedding/</link><pubDate>Sun, 09 Aug 2026 09:00:00 +0000</pubDate><guid>https://rhidayat.work/series/go/08-methods-and-struct-embedding/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Go favors &lt;strong&gt;Composition over Inheritance&lt;/strong&gt;. By embedding structs inside other structs, you automatically promote fields and methods without the rigid coupling of object-oriented class hierarchies.
&lt;/div&gt;</description></item><item><title>Go Ep 7: Pointers &amp; Memory Allocation</title><link>https://rhidayat.work/series/go/07-pointers-and-memory-allocation/</link><pubDate>Sun, 09 Aug 2026 08:50:00 +0000</pubDate><guid>https://rhidayat.work/series/go/07-pointers-and-memory-allocation/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Go is a pass-by-value language. When you pass an argument to a function, Go creates a copy. Pointers allow you to share memory directly across function boundaries without copying large data structures.
&lt;/div&gt;</description></item><item><title>Go Ep 6: Structs, Fields &amp; JSON Serialization</title><link>https://rhidayat.work/series/go/06-structs-fields-and-json-tags/</link><pubDate>Sun, 09 Aug 2026 08:45:00 +0000</pubDate><guid>https://rhidayat.work/series/go/06-structs-fields-and-json-tags/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Go is not a class-based object-oriented language. Instead, Go uses &lt;strong&gt;Structs&lt;/strong&gt; to group typed fields together into contiguous memory blocks.
&lt;/div&gt;</description></item><item><title>Go Ep 5: Maps &amp; Hash Tables</title><link>https://rhidayat.work/series/go/05-maps-and-hash-tables/</link><pubDate>Sun, 09 Aug 2026 08:40:00 +0000</pubDate><guid>https://rhidayat.work/series/go/05-maps-and-hash-tables/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Maps provide fast $O(1)$ key-value lookups. Understanding map initialization and comma-ok lookups is essential for safe data manipulation.
&lt;/div&gt;</description></item><item><title>Go Ep 4: Arrays, Slices &amp; Memory Capacity</title><link>https://rhidayat.work/series/go/04-arrays-slices-and-capacity/</link><pubDate>Sun, 09 Aug 2026 08:30:00 +0000</pubDate><guid>https://rhidayat.work/series/go/04-arrays-slices-and-capacity/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 In Go, an &lt;strong&gt;Array&lt;/strong&gt; has a fixed length determined at compile time. A &lt;strong&gt;Slice&lt;/strong&gt; is a lightweight, dynamically sized view into an underlying array. Understanding slice capacity (&lt;code&gt;cap&lt;/code&gt;) prevents accidental memory reallocation overhead.
&lt;/div&gt;</description></item><item><title>Go Ep 3: Functions, Defer &amp; Closures</title><link>https://rhidayat.work/series/go/03-functions-defer-and-closures/</link><pubDate>Sun, 09 Aug 2026 08:20:00 +0000</pubDate><guid>https://rhidayat.work/series/go/03-functions-defer-and-closures/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Functions in Go can return multiple values natively. Coupled with the &lt;strong&gt;&lt;code&gt;defer&lt;/code&gt;&lt;/strong&gt; statement, Go provides a clean, elegant mechanism for resource management that replaces cumbersome &lt;code&gt;try/finally&lt;/code&gt; blocks.
&lt;/div&gt;</description></item><item><title>Go Ep 2: Control Flow &amp; Loops</title><link>https://rhidayat.work/series/go/02-control-structures-and-loops/</link><pubDate>Sun, 09 Aug 2026 08:10:00 +0000</pubDate><guid>https://rhidayat.work/series/go/02-control-structures-and-loops/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Unlike languages with &lt;code&gt;while&lt;/code&gt;, &lt;code&gt;do-while&lt;/code&gt;, and &lt;code&gt;foreach&lt;/code&gt;, Go has only ONE keyword for looping: &lt;strong&gt;&lt;code&gt;for&lt;/code&gt;&lt;/strong&gt;. This design eliminates syntax complexity while maintaining complete control over iteration.
&lt;/div&gt;</description></item><item><title>Go Ep 1: Toolchain, Syntax &amp; Primitive Types</title><link>https://rhidayat.work/series/go/01-introduction-syntax-variables-types/</link><pubDate>Sun, 09 Aug 2026 08:00:00 +0000</pubDate><guid>https://rhidayat.work/series/go/01-introduction-syntax-variables-types/</guid><description>&lt;div class="lead text-neutral-500 dark:text-neutral-400 !mb-9 text-xl"&gt;
 Designed at Google by Robert Griesemer, Rob Pike, and Ken Thompson, Go (Golang) is an open-source programming language built for simplicity, concurrency, and high-performance systems engineering.
&lt;/div&gt;</description></item></channel></rss>