PageSourceSearch

https://www.gopherguides.com/articles

html gopherguides.com collected 2026-09-29 03:47:12 UTC 62,938 bytes, 250 lines download raw bytes

1<!doctype html><html lang="en"><head><!-- Google Tag Manager -->
1<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
2			new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
3			j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
4			'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
5			})(window,document,'script','dataLayer','GT-MQP3875');</script>
5<!-- End Google Tag Manager --><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Go Tips and Tricks, Articles, and more! - Gopher Guides</title><meta name="description" content="The Gopher Guides blog includes articles for Go (golang).  Follow us to keep up to date on tips and tricks for Go, New features in Go, and more!"><!-- OpenGraph --><meta property="og:description" content="The Gopher Guides blog includes articles for Go (golang).  Follow us to keep up to date on tips and tricks for Go, New features in Go, and more!"><meta property="og:image" content="{{path}}/assets/images/social/generic/blog.png"><meta property="og:title" content="Go Tips and Tricks, Articles, and more!"><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Go Tips and Tricks, Articles, and more!"><meta name="twitter:description" content="The Gopher Guides blog includes articles for Go (golang).  Follow us to keep up to date on tips and tricks for Go, New features in Go, and more!"><meta name="twitter:image" content="{{path}}/assets/images/social/generic/blog.png"><link rel="apple-touch-icon" sizes="180x180" href="/assets/images/favicons/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/assets/images/favicons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/assets/images/favicons/favicon-16x16.png"><link rel="manifest" href="/assets/images/favicons/site.webmanifest"><link rel="mask-icon" href="/assets/images/favicons/safari-pinned-tab.svg" color="#8cbb81"><meta name="msapplication-TileColor" content="#c1dbbb"><meta name="theme-color" content="#ffffff"><link href="/assets/css/app.css" rel="stylesheet"><link href="/assets/css/chroma.css" rel="stylesheet"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css" integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg==" crossorigin="anonymous" referrerpolicy="no-referrer"><link href="https://fonts.googleapis.com/css2?family=Karla:ital,wght@0,400;0,700;1,400&family=Roboto+Condensed:wght@400;700&family=Roboto:wght@100;300;400;700&display=swap" rel="stylesheet"><!-- Analytics Tracking -->
5<script src="/assets/js/analytics.js"></script>
5</head><body class="flex flex-col min-h-screen"><!-- Google Tag Manager (noscript) --><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GT-MQP3875" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><!-- End Google Tag Manager (noscript) --><header class="site-header"><div class="flex-1024"><a href="/" id="logo"><img src="/assets/images/logos/media/safari_gopher2.svg" alt="Gopher Guides"></a> <button class="toggle"><span class="hamb"><span></span><span></span><span></span></span></button><nav class="main-nav-wrapper"><ul class="main-nav"><li class="parent"><a href="javascript:void(0)">Enterprise Training</a><ul><li><a href="/enterprise-golang-training">About</a></li><li><a href="/courses/introduction-to-golang-training">Intro</a></li><li><a href="/courses/advanced-golang-training">Advanced</a></li><li><a href="/courses/testing-stubbing-automating-golang-training">Testing</a></li><li><a href="/courses/profiling-optimizing-golang-training">Optimization</a></li><li><a href="/courses/web-api-golang-training">Web API</a></li><li><a href="/courses/grpc-gateway-golang-training">gRPC</a></li><li><a href="/courses/mastering-golang-training">Mastering</a></li><li><a href="/courses/custom-golang-courses">Custom</a></li><li><a href="/app/courses">My Courses</a></li></ul></li><li class="parent"><a href="javascript:void(0)">Services</a><ul><li><a href="/go-consulting">Consulting</a></li><li><a href="/code-audit">Code Audit</a></li></ul></li><li class="parent"><a href="javascript:void(0)">Individual Training</a><ul><li><a href="/individual">About</a></li></ul></li><li><a href="/team">Team</a></li><li><a href="/articles">Blog</a></li><li class="parent"><a href="javascript:void(0)">Go Fundamentals Book</a><ul><li><a href="/golang-fundamentals-book">About Go Fundamentals</a></li><li><a href="/golang-fundamentals-book/foreword-by-steve-francia">Foreword</a></li><li><a href="/golang-fundamentals-book/table-of-contents">Table of Contents</a></li></ul></li><li><a href="/contact">Contact</a></li><li class="login"><a href="/app/sign-in">Login</a></li></ul></nav></div></header><main class="flex-1"><section class="py-12 sm:py-16"><div class="max-w-[1600px] mx-auto px-4 sm:px-6 lg:px-8"><h2 class="text-4xl sm:text-5xl font-light text-gray-900 mb-2">Latest <span class="text-[#8cbb81] font-bold">Blog</span></h2><div class="w-16 h-1 bg-[#8cbb81] mb-10 rounded-full"></div><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"><article><a href="/articles/golang-generic-methods" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/golang-generic-methods-1x.png" srcset="/assets/images/blog/golang-generic-methods-2x.png 2x, /assets/images/blog/golang-generic-methods-3x.png 3x" alt="Generic Methods Arrive in Go 1.27"></a><h3 class="mb-3"><a href="/articles/golang-generic-methods" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Generic Methods Arrive in Go 1.27</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 07/10/2026</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
6
7
8<h2>Overview</h2>
9
10<p>When generics landed in Go (golang) 1.18, they came with a rule that has annoyed people ever since: functions could declare type parameters, but methods could not. Go 1.27 removes that rule. A method can now declare its own type parameters, which makes patterns like chainable transformations possible for the first time. This was one of the most requested features in the language, and one of the most debated. In this article, we&#39;ll look at the problem, the fix, and the restrictions that come with it.</p>
11</p><a href="/articles/golang-generic-methods" class="inline-flex items-center gap-2 text-[#8
11cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/golang-encoding-json-v2" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/golang-encoding-json-v2-1x.png" srcset="/assets/images/blog/golang-encoding-json-v2-2x.png 2x, /assets/images/blog/golang-encoding-json-v2-3x.png 3x" alt="JSON v2 Lands in the Go Standard Library"></a><h3 class="mb-3"><a href="/articles/golang-encoding-json-v2" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">JSON v2 Lands in the Go Standard Library</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 07/10/2026</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
12
13
14<h2>Overview</h2>
15
16<p>The <code>encoding/json</code> package is one of the oldest packages in Go (golang), and it shows. It matches field names case-insensitively, silently accepts duplicate keys, and marshals nil slices as <code>null</code>. We&#39;ve all worked around these for years. Thankfully, Go 1.27 ships the fix: <a href="https://pkg.go.dev/encoding/json/v2" rel="nofollow">encoding/json/v2</a> graduates from experiment to standard library. It&#39;s stricter by default, significantly faster at unmarshaling, and your existing <code>encoding/json</code> code keeps working. In this article, we&#39;ll walk through what actually changes, by example.</p>
17</p><a href="/articles/golang-encoding-json-v2" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/golang-1-26-everyday-apis" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/golang-1-26-everyday-apis-1x.png" srcset="/assets/images/blog/golang-1-26-everyday-apis-2x.png 2x, /assets/images/blog/golang-1-26-everyday-apis-3x.png 3x" alt="Go 1.26: The APIs You&#39;ll Use Every Day"></a><h3 class="mb-3"><a href="/articles/golang-1-26-everyday-apis" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Go 1.26: The APIs You&#39;ll Use Every Day</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 07/03/2026</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
18
19
20<h2>Overview</h2>
21
22<p>Go (golang) 1.26 shipped in February of 2026. The headlines went to the Green Tea garbage collector and the new SIMD package. Those are great, but they aren&#39;t the changes you&#39;ll notice in your day to day code. The changes you&#39;ll notice are smaller: <code>new</code> now accepts an expression, <a href="https://pkg.go.dev/errors#AsType" rel="nofollow">errors.AsType</a> gives us a generic <code>errors.As</code>, and <a href="https://pkg.go.dev/log/slog#NewMultiHandler" rel="nofollow">slog.NewMultiHandler</a> lets one logger write to many destinations. In this article, we cover each one by example.</p>
23</p><a href="/articles/golang-1-26-everyday-apis" class="inline-flex items-center gap-2 text-[#8
23cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/golang-goroutine-leak-profile" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/golang-goroutine-leak-profile-1x.png" srcset="/assets/images/blog/golang-goroutine-leak-profile-2x.png 2x, /assets/images/blog/golang-goroutine-leak-profile-3x.png 3x" alt="Finding Goroutine Leaks with Go 1.27&#39;s Leak Profiler"></a><h3 class="mb-3"><a href="/articles/golang-goroutine-leak-profile" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Finding Goroutine Leaks with Go 1.27&#39;s Leak Profiler</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 07/03/2026</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
24
25
26<h2>Overview</h2>
27
28<p>Goroutine leaks are one of the sneakiest bugs in Go (golang). A goroutine blocks on a channel that nobody will ever read from, it sits there forever, and your memory slowly climbs until someone gets paged. The old way to find them was to stare at a full goroutine dump and guess which ones were stuck. Go 1.27 gives us something better. The runtime can now prove that certain goroutines can never wake up, and it reports them in a new <code>goroutineleak</code> profile. In this article, we&#39;ll write a leaky program, catch the leak with the new profiler, and fix it.</p>
29</p><a href="/articles/golang-goroutine-leak-profile" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/mcp-server-new-tiers-teams" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/mcp-server-new-tiers-teams-1x.png" srcset="/assets/images/blog/mcp-server-new-tiers-teams-2x.png 2x, /assets/images/blog/mcp-server-new-tiers-teams-3x.png 3x" alt="MCP Server Goes Pro: New Tiers and Tools for Teams"></a><h3 class="mb-3"><a href="/articles/mcp-server-new-tiers-teams" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">MCP Server Goes Pro: New Tiers and Tools for Teams</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 01/27/2026</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
30
31
32<h2>Overview</h2>
33
34<p>Our MCP server has been running in beta since November 2025. The feedback has been solid. Developers are using it daily to audit code, find examples, and get best practice recommendations. Now we&#39;re adding what teams have been asking for: shared accounts, new tools, and pricing that makes sense for organizations.</p>
35</p><a href="/articles/mcp-server-new-tiers-teams" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/ai-back-where-i-started" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/ai-back-where-i-started-1x.png" srcset="/assets/images/blog/ai-back-where-i-started-2x.png 2x, /assets/images/blog/ai-back-where-i-started-3x.png 3x" alt="AI: Back Where I Started"></a><h3 class="mb-3"><a href="/articles/ai-back-where-i-started" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8
35cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">AI: Back Where I Started</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 01/02/2026</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
36
37
38<h2>Overview</h2>
39
40<p>I spent over a decade building muscle memory in vim and tmux. Then AI-powered IDEs like Cursor showed productivity gains I couldn&#39;t ignore, so I made the switch despite the pain. A year later, I&#39;m back in the terminal. Not because I gave up on AI, but because AI evolved. CLI-based agents like Claude Code changed everything. Now I work from anywhere via Tailscale and Termux, running multiple AI agents simultaneously without my machine crashing. The future of development wasn&#39;t in the IDE. It was in making the terminal powerful enough to compete.</p>
41</p><a href="/articles/ai-back-where-i-started" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/gopher-ai-plugins" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/gopher-ai-plugins-1x.png" srcset="/assets/images/blog/gopher-ai-plugins-2x.png 2x, /assets/images/blog/gopher-ai-plugins-3x.png 3x" alt="From Commands to Plugins: How Gopher AI Changed My Go Workflow"></a><h3 class="mb-3"><a href="/articles/gopher-ai-plugins" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">From Commands to Plugins: How Gopher AI Changed My Go Workflow</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 12/17/2025</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
42
43
44<h2>Overview</h2>
45
46<p>I wrote about Claude Commands a few weeks ago. Clone this, symlink that, update manually. It worked, but managing individual command repos felt like the early days of GOPATH. Then Claude Code introduced plugins, and everything clicked. Now I have opinionated dev workflows, auto-invoked best practices, and Go training materials baked right in—no symlinking required.</p>
47</p><a href="/articles/gopher-ai-plugins" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/claude-commands" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/claude-commands-1x.png" srcset="/assets/images/blog/claude-commands-2x.png 2x, /assets/images/blog/claude-commands-3x.png 3x" alt="Why I Stopped Prompting and Started Commanding"></a><h3 class="mb-3"><a href="/articles/claude-commands" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Why I Stopped Prompting and Started Commanding</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 12/03/2025</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
48
49
50<h2>Overview</h2>
51
52<p>I was already using AI for everything—fixing issues, generating tests, reviewing code. But every day I&#39;
52d re-explain my process, skip context because typing was tedious, and wonder why the output wasn&#39;t quite right. Then I realized: the problem wasn&#39;t AI. It was me being lazy with my prompts. Commands fixed that.</p>
53</p><a href="/articles/claude-commands" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/ai-training-paradox-why-expertise-matters-more" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/ai-training-paradox-why-expertise-matters-more-1x.png" srcset="/assets/images/blog/ai-training-paradox-why-expertise-matters-more-2x.png 2x, /assets/images/blog/ai-training-paradox-why-expertise-matters-more-3x.png 3x" alt="The Training Paradox: Why AI Makes Expert Training More Important, Not Less"></a><h3 class="mb-3"><a href="/articles/ai-training-paradox-why-expertise-matters-more" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">The Training Paradox: Why AI Makes Expert Training More Important, Not Less</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 11/02/2025</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
54
55
56<h2>Overview</h2>
57
58<p>Here&#39;s the counterintuitive truth emerging from two years of AI coding assistants: the better you already are at programming, the more AI helps you. The worse you are, the more it can hurt. This is creating a widening skills gap in software development, and it&#39;s exactly the opposite of what everyone predicted when ChatGPT launched. Training isn&#39;t becoming obsolete. It&#39;s becoming the difference between thriving with AI and drowning in AI-generated technical debt.</p>
59</p><a href="/articles/ai-training-paradox-why-expertise-matters-more" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/gopher-guides-mcp-server-beta-announcement" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/gopher-guides-mcp-server-beta-announcement-1x.png" srcset="/assets/images/blog/gopher-guides-mcp-server-beta-announcement-2x.png 2x, /assets/images/blog/gopher-guides-mcp-server-beta-announcement-3x.png 3x" alt="Expert Go Training, Now in Your AI Assistant"></a><h3 class="mb-3"><a href="/articles/gopher-guides-mcp-server-beta-announcement" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Expert Go Training, Now in Your AI Assistant</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 11/01/2025</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
60
61
62<h2>Overview</h2>
63
64<p>What if your AI coding assistant had instant access to 30+ years of Go training expertise? Not the jumbled mess of Stack Overflow and GitHub repos it usually learns from, but actual, curated, battle-tested best practices from thousands of hours teaching Go in production environments. We&#39;re building that. It&#39;s in beta now, and if you&#39;ve ever trained with Gopher Guides, you get free access.</p>
65</p><a href="/articles/gopher-guides-mcp-server-beta-announcement" class="inline-flex items-center gap-2 text-[#8
65cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/platform-updates-2025-smoother-learning-experience" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/platform-updates-2025-smoother-learning-experience-1x.png" srcset="/assets/images/blog/platform-updates-2025-smoother-learning-experience-2x.png 2x, /assets/images/blog/platform-updates-2025-smoother-learning-experience-3x.png 3x" alt="A Smoother Path to Go Mastery: What&#39;s New in Our Training Platform"></a><h3 class="mb-3"><a href="/articles/platform-updates-2025-smoother-learning-experience" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">A Smoother Path to Go Mastery: What&#39;s New in Our Training Platform</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 10/31/2025</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
66
67
68<h2>Overview</h2>
69
70<p>Over the past three months, we&#39;ve been obsessively focused on eliminating friction in the learning experience. The result? A training platform where you can download entire courses with one click, jump from course material directly into your editor, and navigate content that feels like it was built for how developers actually learn. These aren&#39;t flashy features. They&#39;re thoughtful improvements that get out of your way so you can focus on mastering Go.</p>
71</p><a href="/articles/platform-updates-2025-smoother-learning-experience" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/building-production-seo-validator-4-hours-ai" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/building-production-seo-validator-4-hours-ai-1x.png" srcset="/assets/images/blog/building-production-seo-validator-4-hours-ai-2x.png 2x, /assets/images/blog/building-production-seo-validator-4-hours-ai-3x.png 3x" alt="Building a Production-Ready SEO Validator in 4 Hours"></a><h3 class="mb-3"><a href="/articles/building-production-seo-validator-4-hours-ai" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Building a Production-Ready SEO Validator in 4 Hours</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 07/11/2025</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
72
73
74<h2>Overview</h2>
75
76<p>As a senior developer with 20+ years in the trenches, I built a fully functional, production-ready SEO validation system in under 4 hours using AI assistance. Ten years ago, this would have taken me weeks. But here&#39;s the key insight: without being a senior level developer, AI would have never gotten this to work. This is the story of how AI amplifies expertise rather than replacing it, complete with real metrics, mistakes made, and lessons learned.</p>
77</p><a href="/articles/building-production-seo-validator-4-hours-ai" class="inline-flex items-center gap-2 text-[#8
77cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/why-your-team-still-needs-go-training-in-the-age-of-ai" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/why-your-team-still-needs-go-training-in-the-age-of-ai-1x.png" srcset="/assets/images/blog/why-your-team-still-needs-go-training-in-the-age-of-ai-2x.png 2x, /assets/images/blog/why-your-team-still-needs-go-training-in-the-age-of-ai-3x.png 3x" alt="Why Your Team Still Needs Go Training in the Age of AI"></a><h3 class="mb-3"><a href="/articles/why-your-team-still-needs-go-training-in-the-age-of-ai" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Why Your Team Still Needs Go Training in the Age of AI</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 06/08/2025</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
78
79
80<h2>Overview</h2>
81
82<p>AI hasn&#39;t killed software training. In fact, after seeing training demand slow down initially when ChatGPT and Copilot took off, we&#39;re now busier than ever. Why? Because teams are discovering what I&#39;ve been saying all along - AI is only as good as the code it learned from, and most Go code out there isn&#39;t idiomatic.</p>
83</p><a href="/articles/why-your-team-still-needs-go-training-in-the-age-of-ai" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/golang-quick-tips-pointers" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/golang-quick-tips-pointers-1x.png" srcset="/assets/images/blog/golang-quick-tips-pointers-2x.png 2x, /assets/images/blog/golang-quick-tips-pointers-3x.png 3x" alt="Quick Tips: Pointer Optimizations in Go"></a><h3 class="mb-3"><a href="/articles/golang-quick-tips-pointers" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Quick Tips: Pointer Optimizations in Go</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 10/24/2024</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
84
85
86<h2>Overview</h2>
87
88<p>This article explores important performance considerations when working with pointers in Go. We&#39;ll cover key topics like returning pointers to local variables, choosing between pointer and value receivers for methods, and how to properly measure and optimize pointer-related performance using Go&#39;s built-in tools. Whether you&#39;re new to Go or an experienced developer, these tips will help you write more efficient and maintainable code.</p>
89</p><a href="/articles/golang-quick-tips-pointers" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/golang-hype-quickstart" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/golang-hype-quickstart-1x.png" srcset="/assets/images/blog/golang-hype-quickstart-2x.png 2x, /assets/images/blog/golang-hype-quickstart-3x.png 3x" alt="Hype Quick Start Guide"></a><h3 class="mb-3"><a href="/articles/golang-hype-quickstart" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8
89cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Hype Quick Start Guide</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 01/25/2024</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
90
91
92<h2>Overview</h2>
93
94<p>This article covers the basics of quickly writing a technical article using Hype.</p>
95</p><a href="/articles/golang-hype-quickstart" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/golang-hype-markdown" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/golang-hype-markdown-1x.png" srcset="/assets/images/blog/golang-hype-markdown-2x.png 2x, /assets/images/blog/golang-hype-markdown-3x.png 3x" alt="Writing Technical Articles using Hype"></a><h3 class="mb-3"><a href="/articles/golang-hype-markdown" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Writing Technical Articles using Hype</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 01/24/2024</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
96
97
98<h2>Overview</h2>
99
100<p>Creating technical articles can be painful when they include code samples and output from running programs.  Hype makes this easy to not only create those articles, but ensure that all included content for the code, etc stays up to date.  In this article, we will show how to set up Hype locally, create hooks for live reloading and compiling of your documents, as well as show how to dynamically include code and output directly to your documents.</p>
101</p><a href="/articles/golang-hype-markdown" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/golang-slog-package" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/golang-slog-package-1x.png" srcset="/assets/images/blog/golang-slog-package-2x.png 2x, /assets/images/blog/golang-slog-package-3x.png 3x" alt="Go (golang) Slog Package"></a><h3 class="mb-3"><a href="/articles/golang-slog-package" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Go (golang) Slog Package</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 08/08/2023</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
102
103
104<h2>Overview</h2>
105
106<p>In Go (golang) release 1.21, the <a href="https://pkg.go.dev/slog" rel="nofollow">slog</a> package will be added to the standard library.  It includes many useful features such as structured logging as well as level logging. In this article, we will talk about the history of logging in Go, the challenges faced, and how the new <code>slog</code> package will help address those challenges.</p>
107</p><a href="/articles/golang-slog-package" class="inline-flex items-center gap-2 text-[#8
107cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/golang-slices-package" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/golang-slices-package-1x.png" srcset="/assets/images/blog/golang-slices-package-2x.png 2x, /assets/images/blog/golang-slices-package-3x.png 3x" alt="The Slices Package"></a><h3 class="mb-3"><a href="/articles/golang-slices-package" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">The Slices Package</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 08/01/2023</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
108
109
110<h2>Overview</h2>
111
112<p>In release 1.21, the <a href="https://pkg.go.dev/slices" rel="nofollow">slices</a> package will be officially added to the standard library.  It includes many useful functions for sorting, managing, and searching slices. In this article, we will cover the more commonly used functions included in the Slices package.</p>
113</p><a href="/articles/golang-slices-package" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/masters-style-go-courses" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/masters-style-go-courses-1x.png" srcset="/assets/images/blog/masters-style-go-courses-2x.png 2x, /assets/images/blog/masters-style-go-courses-3x.png 3x" alt="Masters Style Go Courses"></a><h3 class="mb-3"><a href="/articles/masters-style-go-courses" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Masters Style Go Courses</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Mark Bates</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 04/27/2021</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
114
115
116<h2>Overview</h2>
117
118<p>After training for over four years, and recently enrolling in my own Masters degree program, I&#39;ve married both of my passions and I&#39;m excited to announce our new Masters Style Go Courses!</p>
119</p><a href="/articles/masters-style-go-courses" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/table-driven-testing-in-parallel" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/table-driven-testing-in-parallel-1x.png" srcset="/assets/images/blog/table-driven-testing-in-parallel-2x.png 2x, /assets/images/blog/table-driven-testing-in-parallel-3x.png 3x" alt="Table Driven Testing In Parallel"></a><h3 class="mb-3"><a href="/articles/table-driven-testing-in-parallel" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8
119cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Table Driven Testing In Parallel</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 04/21/2021</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
120
121
122<h2>Overview</h2>
123
124<p>Table driven testing is not a unique concept to the Go programming language. However, there are some great features that make table driven testing in Go faster and more reusable. This article will cover how to get the most out of table driven testing with Go (golang).</p>
125</p><a href="/articles/table-driven-testing-in-parallel" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/golang-1.16-io-fs-improve-test-performance" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/golang-1.16-io-fs-improve-test-performance-1x.png" srcset="/assets/images/blog/golang-1.16-io-fs-improve-test-performance-2x.png 2x, /assets/images/blog/golang-1.16-io-fs-improve-test-performance-3x.png 3x" alt="Exploring &#34;io/fs&#34; to Improve Test Performance and Testability"></a><h3 class="mb-3"><a href="/articles/golang-1.16-io-fs-improve-test-performance" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Exploring &#34;io/fs&#34; to Improve Test Performance and Testability</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Mark Bates</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 02/22/2021</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
126
127
128<h2>Overview</h2>
129
130<p>The most anticipated feature of Go <code>1.16</code> is the addition to the Go tooling, and standard library, that allow for embedding static content into binaries. While it is tempting to start playing with this new toy right away, it is important to understand how it works first. In this article we are going to take a look at the new <a href="https://pkg.go.dev/io/fs" rel="nofollow"><code>io/fs</code></a> package introduced in Go <code>1.16</code> to support embedding.</p>
131</p><a href="/articles/golang-1.16-io-fs-improve-test-performance" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/how-to-use-iota-in-golang" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/how-to-use-iota-in-golang-1x.png" srcset="/assets/images/blog/how-to-use-iota-in-golang-2x.png 2x, /assets/images/blog/how-to-use-iota-in-golang-3x.png 3x" alt="Where and When to use Iota in Go"></a><h3 class="mb-3"><a href="/articles/how-to-use-iota-in-golang" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Where and When to use Iota in Go</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 02/10/2021</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
132
133
134<h2>Overview</h2>
135
136<p>Iota is a useful concept for creating incrementing constants in Go. However, there are several areas where iota may not be appropriate to use. This article will cover several different ways in which you can use iota, and tips on where to be cautious with its use.</p>
137</p><a href="/articles/how-to-use-iota-in-golang" class="inline-flex items-center gap-2 text-[#8
137cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/leveraging-the-go-type-system" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/leveraging-the-go-type-system-1x.png" srcset="/assets/images/blog/leveraging-the-go-type-system-2x.png 2x, /assets/images/blog/leveraging-the-go-type-system-3x.png 3x" alt="Leveraging the Go Type System"></a><h3 class="mb-3"><a href="/articles/leveraging-the-go-type-system" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Leveraging the Go Type System</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 02/03/2021</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
138
139
140<h2>Overview</h2>
141
142<p>If you haven&#39;t worked in a typed language before, it may not be obvious at first the power that it brings. This article will show you how to leverage the type system to make your code easier to use and more reusable.</p>
143</p><a href="/articles/leveraging-the-go-type-system" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/embracing-the-go-type-system" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/embracing-the-go-type-system-1x.png" srcset="/assets/images/blog/embracing-the-go-type-system-2x.png 2x, /assets/images/blog/embracing-the-go-type-system-3x.png 3x" alt="Embracing the Go Type System"></a><h3 class="mb-3"><a href="/articles/embracing-the-go-type-system" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Embracing the Go Type System</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i>
143 01/26/2021</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
144
145
146<h2>Overview</h2>
147
148<p>Go is a typed language, but most Go developers don&#39;t truly embrace it. This short article talks about tips and tricks to write more robust code using custom types in Go.</p>
149</p><a href="/articles/embracing-the-go-type-system" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/whats-in-a-name-dave-cheney" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/whats-in-a-name-dave-cheney-1x.png" srcset="/assets/images/blog/whats-in-a-name-dave-cheney-2x.png 2x, /assets/images/blog/whats-in-a-name-dave-cheney-3x.png 3x" alt="What&#39;s in a name?"></a><h3 class="mb-3"><a href="/articles/whats-in-a-name-dave-cheney" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">What&#39;s in a name?</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Dave Cheney</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 06/30/2020</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
150
151
152<h2>Overview</h2>
153
154<p>The art of writing software is the act of communication. You might feel that this is a private conversation about your code with a persnickety compiler, but the audience for software is much larger. It’s the people who use your libraries and your APIs, the folks who work with you maintaining the codebase, and it&#39;s you, in the future, searching for clues about why you wrote what you wrote the way you wrote it. This talk is all about naming. It’s about the names we give to things in our programs and how those decisions can affect the maintainability of the software we write.</p>
155</p><a href="/articles/whats-in-a-name-dave-cheney" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/test-cleanup-in-go-1-14" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/test-cleanup-in-go-1-14-1x.png" srcset="/assets/images/blog/test-cleanup-in-go-1-14-2x.png 2x, /assets/images/blog/test-cleanup-in-go-1-14-3x.png 3x" alt="What&#39;s new in Go 1.14: Test Cleanup"></a><h3 class="mb-3"><a href="/articles/test-cleanup-in-go-1-14" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">What&#39;s new in Go 1.14: Test Cleanup</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Tim Raymond</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 02/11/2020</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
156
157
158<h1>Overview</h1>
159
160<p>The process of writing a unit test usually follows a certain set of steps. First, we set up dependencies of the unit under test. Next, we execute the unit of logic under test. We then compare the results of that execution to our expectations. Finally, we tear down any dependencies and restore the environment to the state we found it so as not to affect other unit tests. In Go 1.14, the <code>testing</code> package now includes a method, <code>testing.(*T).Cleanup</code>, which aims to make creating and cleaning up dependencies of tests easier.</p>
161</p><a href="/articles/test-cleanup-in-go-1-14" class="inline-flex items-center gap-2 text-[#8
161cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/converting-a-static-website-to-golang-buffalo" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/converting-a-static-website-to-golang-buffalo-1x.png" srcset="/assets/images/blog/converting-a-static-website-to-golang-buffalo-2x.png 2x, /assets/images/blog/converting-a-static-website-to-golang-buffalo-3x.png 3x" alt="Converting a Static Site to Buffalo"></a><h3 class="mb-3"><a href="/articles/converting-a-static-website-to-golang-buffalo" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Converting a Static Site to Buffalo</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i> 01/24/2020</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
162<h2>Overview</h2>
163
164
165
166<p>I recently had a friend come to me and mention that their website I created for them years ago needed some updating. After looking at it, it was clear it was time for an update. This article will walk through the design decisions and technical challenges that I needed to address in bringing their site up to some modern standards.</p>
167</p><a href="/articles/converting-a-static-website-to-golang-buffalo" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article><article><a href="/articles/dont-commit-improperly-formatted-golang-code" class="block mb-4"><img class="w-full h-72 object-cover rounded-lg shadow-md hover:shadow-lg transition-shadow" src="/assets/images/blog/dont-commit-improperly-formatted-golang-code-1x.png" srcset="/assets/images/blog/dont-commit-improperly-formatted-golang-code-2x.png 2x, /assets/images/blog/dont-commit-improperly-formatted-golang-code-3x.png 3x" alt="Don’t Commit Improperly Formatted Go (golang) Code"></a><h3 class="mb-3"><a href="/articles/dont-commit-improperly-formatted-golang-code" class="text-[32px] leading-[1.2] font-normal uppercase text-[#8cbb81] hover:text-[#6a9a61] transition-colors duration-200 font-['Karla',_'Helvetica_Neue',_Helvetica,_Arial,_sans-serif]">Don’t Commit Improperly Formatted Go (golang) Code</a></h3><div class="flex items-center gap-4 text-base text-gray-500 mb-4"><span class="flex items-center gap-1"><i class="far fa-user text-sm"></i> Cory LaNou</span> <span class="flex items-center gap-1"><i class="far fa-calendar text-sm"></i>
167 03/17/2019</span></div><p class="text-gray-600 text-lg leading-relaxed mb-4">
168
169
170<h2>Overview</h2>
171
172<p>This article will outline how in just a few easy steps using <code>git hooks</code> how to ensure you never commit improperly formatted code.</p>
173</p><a href="/articles/dont-commit-improperly-formatted-golang-code" class="inline-flex items-center gap-2 text-[#8cbb81] font-medium hover:text-[#6a9a61] transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line> <polyline points="12 5 19 12 12 19"></polyline></svg> Learn more</a></article></div></div></section></main><footer class="bg-gray-800 text-white"><div class="max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8"><p class="text-center text-sm">&copy; 2025 Gopher Guides. All rights reserved.</p></div></footer>
173<script src="/assets/js/code-copy.js"></script>
173<script>
174				// Mobile nav toggle
175				document.addEventListener('DOMContentLoaded', function() {
176					const toggle = document.querySelector('.toggle');
177					const navWrapper = document.querySelector('.main-nav-wrapper');
178
179					if (toggle && navWrapper) {
180						toggle.addEventListener('click', function() {
181							navWrapper.classList.toggle('active');
182							this.classList.toggle('active');
183						});
184					}
185				});
186			</script>
186<!-- Image Lightbox --><div id="image-lightbox" class="hidden fixed inset-0 z-50 items-center justify-center p-4 bg-black/90"><!-- Close Button --><button id="image-lightbox-close" class="absolute top-4 right-4 text-white hover:text-gray-300 transition-colors z-10" aria-label="Close lightbox"><svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg></button><!-- Zoom hint --><div class="absolute top-4 left-4 text-white/60 text-sm">Press <kbd class="px-2 py-0.5 bg-white/20 rounded">Esc</kbd> or click outside to close</div><!-- Image Container --><img id="image-lightbox-img" class="max-w-full max-h-full object-contain rounded-lg shadow-2xl"></div>
186<script>
187				// Image Lightbox
188				(function() {
189					const lightbox = document.getElementById('image-lightbox');
190					const image = document.getElementById('image-lightbox-img');
191					const closeButton = document.getElementById('image-lightbox-close');
192
193					function show(src, alt) {
194						image.src = src;
195						image.alt = alt || 'Image';
196						lightbox.classList.remove('hidden');
197						lightbox.classList.add('flex');
198						document.body.style.overflow = 'hidden';
199					}
200
201					function close() {
202						lightbox.classList.add('hidden');
203						lightbox.classList.remove('flex');
204						document.body.style.overflow = '';
205					}
206
207					document.addEventListener('DOMContentLoaded', function() {
208						// Wrap article images with zoom overlay
209						document.querySelectorAll('.prose img').forEach(img => {
210							// Create wrapper with group and relative positioning
211							const wrapper = document.createElement('div');
212							wrapper.className = 'group relative inline-block cursor-zoom-in overflow-hidden rounded-lg';
213
214							// Create overlay that covers the entire image
215							const overlay = document.createElement('div');
216							overlay.className = 'absolute inset-0 flex items-center justify-center bg-black/50 opacity-0 group-hover:opacity-100 transition-opacity duration-300 rounded-lg pointer-events-none';
217							overlay.innerHTML = `
218								<div class="flex flex-col items-center gap-2 text-white">
219									<svg class="w-10 h-10" fill="none" stroke="currentColor" viewBox="0 0 24 24">
220										<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v3m0 0v3m0-3h3m-3 0H7"></path>
221									</svg>
222									<span class="text-sm font-medium">Click to zoom</span>
223								</div>
224							`;
225
226							// Wrap the image
227							img.parentNode.insertBefore(wrapper, img);
228							wrapper.appendChild(img);
229							wrapper.appendChild(overlay);
230
231							// Add click handler
232							wrapper.addEventListener('click', () => show(img.src, img.alt));
233						});
234					});
235
236					closeButton.addEventListener('click', close);
237
238					lightbox.addEventListener('click', function(e) {
239						if (e.target === lightbox) {
240							close();
241						}
242					});
243
244					document.addEventListener('keydown', function(e) {
245						if (e.key === 'Escape') {
246							close();
247						}
248					});
249				})();
250			</script>
250</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.