<?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 sugar, spice, &amp;terminal? nice</title>
    <link>https://terminal.space/tag/go/</link>
    <description>Recent content in Go on sugar, spice, &amp;terminal? nice</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 19 Feb 2026 17:56:30 +0000</lastBuildDate>
    <atom:link href="https://terminal.space/tag/go/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Introducing FrozenDB</title>
      <link>https://terminal.space/tech/introducing-frozendb/</link>
      <pubDate>Thu, 19 Feb 2026 17:56:30 +0000</pubDate>
      <guid>https://terminal.space/tech/introducing-frozendb/</guid>
      <description>&lt;p&gt;To make apple pie from scratch, you must first invent a database to store your recipes. - &lt;a href=&#34;https://en.wikipedia.org/wiki/Cosmos_(Sagan_book)&#34;&gt;Carl Sagan&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Well Carl (and avid readers), let me introduce you to &lt;a href=&#34;https://github.com/susu-dot-dev/frozenDB&#34;&gt;FrozenDB&lt;/a&gt;. This is my twist on a single-file database, with the requirement that it operates on append-only files. FrozenDB is not something for production, but a learning exercise. This companion post expands on some of the things I learned about append-only structures, and database mechanics.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go concurrency the right way (e.g. my way)</title>
      <link>https://terminal.space/tech/go-concurrency-the-right-way-e-g-my-way/</link>
      <pubDate>Fri, 23 Sep 2022 04:01:41 +0000</pubDate>
      <guid>https://terminal.space/tech/go-concurrency-the-right-way-e-g-my-way/</guid>
      <description>&lt;figure&gt;&lt;img src=&#34;https://terminal.space/tech/go-concurrency-the-right-way-e-g-my-way/images/john-cameron-kY2H30v6Bs4-unsplash.jpg&#34;&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;My take on go concurrency is that there are 3 things that matter, and we can create a robust pattern using &amp;hellip; 3 technologies to help us out. None of this is really new, but I haven&amp;rsquo;t seen the material presented from this particular viewpoint. With that, and the additional caveat that this isn&amp;rsquo;t a beginner&amp;rsquo;s guide, let&amp;rsquo;s jump straight in&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-matters&#34;&gt;What matters&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Startup&lt;/li&gt;&#xA;&lt;li&gt;Shutdown&lt;/li&gt;&#xA;&lt;li&gt;Throughput&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Once everything is _working_ it&amp;rsquo;s not all that complicated (*) to do concurrency in golang (or any other programming language. Data comes in, it gets farmed out to wherever it needs to go, and you have some synchronization method to prevent corruption.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interfaces in golang</title>
      <link>https://terminal.space/tech/interfaces-in-golang/</link>
      <pubDate>Tue, 11 Jan 2022 08:48:23 +0000</pubDate>
      <guid>https://terminal.space/tech/interfaces-in-golang/</guid>
      <description>&lt;h2 id=&#34;tldr&#34;&gt;TL;DR:&lt;/h2&gt;&#xA;&lt;p&gt;An interface just defines a collection of methods. When you create an instance, it&amp;rsquo;s just a wrapper around a concrete type. In addition to the concrete type, the interface contains an extra array of function pointers. These function pointers correspond to each method in the interface that the concrete type implements&lt;/p&gt;&#xA;&lt;h2 id=&#34;first-a-detour&#34;&gt;First, a detour&lt;/h2&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s define a custom type, and some methods that go with it:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import &amp;#34;fmt&amp;#34;&#xA;&#xA;type ComputerProgrammer string&#xA;&#xA;func (c ComputerProgrammer) Greet(name string) string {&#xA;&#x9;return string(c) + &amp;#34;: hello, &amp;#34; + name&#xA;}&#xA;&#xA;func (c ComputerProgrammer) Walk(distance int) int {&#xA;&#x9;return len(c) + distance&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;a := ComputerProgrammer(&amp;#34;golang&amp;#34;)&#xA;&#x9;fmt.Println(a.Greet(&amp;#34;world&amp;#34;), a.Walk(5))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When go compiles this code, it generates a function similar to this:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
