<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Go on Moises Vega</title><link>https://mvega.dev/tags/go/</link><description>Recent content in Go on Moises Vega</description><generator>Hugo</generator><language>en-us</language><copyright>Moises Vega</copyright><lastBuildDate>Thu, 03 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://mvega.dev/tags/go/index.xml" rel="self" type="application/rss+xml"/><item><title>When THP always Undoes the Go Scavenger's Work</title><link>https://mvega.dev/posts/go-scavenger-thp-oom/</link><pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate><guid>https://mvega.dev/posts/go-scavenger-thp-oom/</guid><description>&lt;p&gt;A fleet of Go services kept getting OOM-killed inside containers whose
memory limits were generous — two to three times the live heap the
runtime reported. We had &lt;code&gt;GODEBUG=madvdontneed=1&lt;/code&gt; set from years back,
so I expected RSS to track the heap closely. Instead RSS climbed in a
sawtooth that never came back down, while &lt;code&gt;runtime.MemStats.HeapReleased&lt;/code&gt;
insisted the memory had been handed back to the kernel.&lt;/p&gt;
&lt;p&gt;Both were telling the truth. The host had
&lt;code&gt;/sys/kernel/mm/transparent_hugepage/enabled&lt;/code&gt; set to &lt;code&gt;always&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>When Request.Body.Close Started Returning io.EOF</title><link>https://mvega.dev/posts/go-http-body-close-eof/</link><pubDate>Thu, 20 Aug 2026 00:00:00 +0000</pubDate><guid>https://mvega.dev/posts/go-http-body-close-eof/</guid><description>&lt;p&gt;While testing an internal HTTP service against Go 1.27, a handler that
had worked for years started reporting errors from an unlikely place:
&lt;code&gt;r.Body.Close()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The handler does what any length-aware decoder does — it reads exactly
the payload it expects and stops, without reading far enough to observe
&lt;code&gt;io.EOF&lt;/code&gt;. Then it closes the body. On Go 1.26 that &lt;code&gt;Close&lt;/code&gt; returned
&lt;code&gt;nil&lt;/code&gt;. On 1.27 it returns &lt;code&gt;io.EOF&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="pinning-it-down"&gt;Pinning it down&lt;/h2&gt;
&lt;p&gt;Timer-driven HTTP repros are flaky, so I drove &lt;code&gt;net/http&lt;/code&gt; over a
&lt;code&gt;net.Pipe&lt;/code&gt; with a one-shot listener: fully deterministic, no real
sockets, no timeouts. The whole thing fits in a
&lt;a href="https://go.dev/play/p/P6gM5GS84Vq"&gt;playground link&lt;/a&gt;. A handler reads 2
of 4 body bytes, closes, and reports the error:&lt;/p&gt;</description></item><item><title>Testing Concurrent Go with synctest</title><link>https://mvega.dev/posts/synctest-concurrent-testing/</link><pubDate>Sun, 16 Aug 2026 00:00:00 +0000</pubDate><guid>https://mvega.dev/posts/synctest-concurrent-testing/</guid><description>&lt;p&gt;Notes from Alexander Baygeldin&amp;rsquo;s GopherCon 2026 talk, &amp;ldquo;(Sync)testing
Concurrent Code with Confidence.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Testing concurrent code used to mean picking one of three bad options:
hacky (poke at internals), flaky (&lt;code&gt;time.Sleep(100 * time.Millisecond)&lt;/code&gt;
and hope), or slow (sleep long enough that it&amp;rsquo;s reliable). &lt;code&gt;testing/synctest&lt;/code&gt;
removes the tradeoff by giving the test a fake clock.&lt;/p&gt;
&lt;h2 id="the-fake-clock"&gt;The fake clock&lt;/h2&gt;
&lt;p&gt;Inside &lt;code&gt;synctest.Test&lt;/code&gt;, time doesn&amp;rsquo;t pass on its own. It jumps forward
only when every goroutine in the bubble is blocked. A one-hour timeout
resolves instantly and deterministically.&lt;/p&gt;</description></item><item><title>Why Go's Generics Rules Keep Loosening</title><link>https://mvega.dev/posts/go-generics-loosening/</link><pubDate>Sun, 16 Aug 2026 00:00:00 +0000</pubDate><guid>https://mvega.dev/posts/go-generics-loosening/</guid><description>&lt;p&gt;Notes from Naoki Kuroda&amp;rsquo;s GopherCon 2026 talk, &amp;ldquo;Loosening the Reins: Go
Generics Get More Flexible.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The talk starts from one line in the Go 1.26 release notes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;type&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Ordered&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;T&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Ordered&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;T&lt;/span&gt;]] &lt;span style="color:#66d9ef"&gt;interface&lt;/span&gt; { &lt;span style="color:#f92672"&gt;...&lt;/span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A constraint that refers to itself. Go 1.25 rejected it as an invalid
recursive type; Go 1.26 accepts it. Kuroda went through the spec
history, issues, and the &lt;code&gt;go/types&lt;/code&gt; checker to find out what changed —
and the answer wasn&amp;rsquo;t &amp;ldquo;we found a clever fix.&amp;rdquo; The original rule had
simply been drawn wider than the problem it was guarding against.&lt;/p&gt;</description></item><item><title>Building Agentic Systems in Go with Ollama</title><link>https://mvega.dev/posts/go-agents-ollama/</link><pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate><guid>https://mvega.dev/posts/go-agents-ollama/</guid><description>&lt;p&gt;I worked through Joel Boursiquot&amp;rsquo;s GopherCon 2026 workshop, &lt;a href="https://github.com/jboursiquot/gc26buildingagenticsystems"&gt;Agentic
Systems the Hard Way&lt;/a&gt;.
Zero third-party dependencies. The framing that stuck: Go is the control
plane; the LLM is the decision engine. Here&amp;rsquo;s the core of it.&lt;/p&gt;
&lt;h2 id="what-an-agent-actually-is"&gt;What an agent actually is&lt;/h2&gt;
&lt;p&gt;Model + tools + loop. The model never executes anything — it emits a
wish (&amp;ldquo;call &lt;code&gt;search_docs&lt;/code&gt; with these args&amp;rdquo;), your Go code validates and
runs it, feeds the result back, and repeats until the model answers
without asking for tools. Deterministic Go around a nondeterministic
model. That&amp;rsquo;s the whole trick.&lt;/p&gt;</description></item><item><title>Local LLM Inference in Go with Kronk</title><link>https://mvega.dev/posts/kronk-local-inference/</link><pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate><guid>https://mvega.dev/posts/kronk-local-inference/</guid><description>&lt;p&gt;I&amp;rsquo;ve been running local models through Ollama&amp;rsquo;s HTTP API for a while. It works, but it means a separate daemon, JSON over localhost, and no control over when models load or unload. &lt;a href="https://github.com/ardanlabs/kronk"&gt;Kronk&lt;/a&gt;, from Ardan Labs, takes the other route: it&amp;rsquo;s a Go SDK that binds llama.cpp (and whisper.cpp, via Bucky) directly into your process. No Python, no sidecar server. The model lives in your binary&amp;rsquo;s memory and you drive it with Go calls.&lt;/p&gt;</description></item><item><title>Go 1.27: The Highlights</title><link>https://mvega.dev/posts/go-1-27/</link><pubDate>Fri, 14 Aug 2026 00:00:00 +0000</pubDate><guid>https://mvega.dev/posts/go-1-27/</guid><description>&lt;p&gt;Go 1.27 lands this month. The &lt;a href="https://go.dev/doc/go1.27"&gt;release notes&lt;/a&gt;
are long; these are the changes I actually care about.&lt;/p&gt;
&lt;h2 id="generic-methods"&gt;Generic methods&lt;/h2&gt;
&lt;p&gt;The headline: methods can finally declare their own type parameters.
Helpers that used to be package-scoped functions can now live on the
type they belong to.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;type&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Set&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;E&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;comparable&lt;/span&gt;] &lt;span style="color:#66d9ef"&gt;struct&lt;/span&gt;{ &lt;span style="color:#a6e22e"&gt;m&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;map&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;E&lt;/span&gt;]&lt;span style="color:#66d9ef"&gt;struct&lt;/span&gt;{} }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;s&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;Set&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;E&lt;/span&gt;]) &lt;span style="color:#a6e22e"&gt;Map&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;T&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;comparable&lt;/span&gt;](&lt;span style="color:#a6e22e"&gt;f&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;func&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;E&lt;/span&gt;) &lt;span style="color:#a6e22e"&gt;T&lt;/span&gt;) &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;Set&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;T&lt;/span&gt;] {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;out&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;Set&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;T&lt;/span&gt;]{&lt;span style="color:#a6e22e"&gt;m&lt;/span&gt;: make(&lt;span style="color:#66d9ef"&gt;map&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;T&lt;/span&gt;]&lt;span style="color:#66d9ef"&gt;struct&lt;/span&gt;{}, len(&lt;span style="color:#a6e22e"&gt;s&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;m&lt;/span&gt;))}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;e&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;range&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;s&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;m&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;m&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;f&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;e&lt;/span&gt;)] = &lt;span style="color:#66d9ef"&gt;struct&lt;/span&gt;{}{}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;out&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;One catch: interface methods cannot declare type parameters, so you
cannot abstract over generic methods with an interface.&lt;/p&gt;</description></item><item><title>Table-Driven Tests in Go</title><link>https://mvega.dev/posts/table-driven-tests/</link><pubDate>Wed, 12 Aug 2026 00:00:00 +0000</pubDate><guid>https://mvega.dev/posts/table-driven-tests/</guid><description>&lt;p&gt;Every Go codebase converges on the same test shape: a slice of cases, a
loop, one &lt;code&gt;t.Run&lt;/code&gt; per case. It is the closest thing Go has to a testing
idiom, and it is worth writing deliberately rather than by habit.&lt;/p&gt;
&lt;h2 id="the-shape"&gt;The shape&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;func&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;TestParseDuration&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;t&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;testing&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;T&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;tests&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; []&lt;span style="color:#66d9ef"&gt;struct&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;give&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;want&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;time&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Duration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;wantErr&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;string&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;seconds&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;give&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;30s&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;want&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;30&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;time&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Second&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;compound&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;give&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;1h30m&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;want&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;90&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;time&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Minute&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;missing unit&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;give&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;30&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;wantErr&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;missing unit&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;_&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;tt&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;range&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;tests&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;t&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Run&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;tt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;func&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;t&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;testing&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;T&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;got&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt; &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ParseDuration&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;tt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;give&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;tt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;wantErr&lt;/span&gt; &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;require&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;ErrorContains&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;t&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;tt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;wantErr&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;require&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;NoError&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;t&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;err&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;assert&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;Equal&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;t&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;tt&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;want&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;got&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; })
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Three things earn their place here.&lt;/p&gt;</description></item></channel></rss>