<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
    <channel>
      <title>ege&#039;s devlog</title>
      <link>https://ege.dev</link>
      <description>Last 10 notes on ege&#039;s devlog</description>
      <generator>Quartz -- quartz.jzhao.xyz</generator>
      <item>
    <title>BCC tools in a debug container</title>
    <link>https://ege.dev/wiki/running-bcc-tools-in-a-debug-container?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
    <guid>https://ege.dev/wiki/running-bcc-tools-in-a-debug-container</guid>
    <description><![CDATA[ <p>BCC - Tools for BPF-based Linux IO analysis, networking, monitoring, and more
<a href="https://github.com/iovisor/bcc" class="external">https://github.com/iovisor/bcc<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></p>
<pre><code>$ kubectl debug node/default-pool-3mrgkk --image debian -it --profile=sysadmin --share-processes=true -- bash

apt update
apt install bpfcc-tools/stable
ln -s /host/lib/modules/ /lib/modules 
ln -s /host/usr/src/* /usr/src/ 
mount -t debugfs debugfs /sys/kernel/debug 
mount -t tracefs tracefs /sys/kernel/tracing 
cachetop-bpfcc
</code></pre> ]]></description>
    <pubDate>Tue, 18 Aug 2026 08:33:08 GMT</pubDate>
  </item><item>
    <title>pg_subscription is a shared catalog</title>
    <link>https://ege.dev/wiki/pg_subscription-is-a-shared-catalog?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
    <guid>https://ege.dev/wiki/pg_subscription-is-a-shared-catalog</guid>
    <description><![CDATA[ <p>How is this possible??</p>
<pre><code>postgres=# alter subscription "pgo_lr_sub_l1_myapp_875a65d6" enable;
ERROR:  subscription "pgo_lr_sub_l1_myapp_875a65d6" does not exist

postgres=# select * from pg_subscription;
-[ RECORD 1 ]-------+----------------------------------------------------------------------------------------------------------------------------------
oid                 | 24664
subdbid             | 16502
subskiplsn          | 0/0
subname             | pgo_lr_sub_l1_myapp_875a65d6
subowner            | 10
subenabled          | f
subbinary           | f
substream           | p
subtwophasestate    | d
subdisableonerr     | t
subpasswordrequired | t
subrunasowner       | f
subfailover         | f
subconninfo         | user=logicalrepl host='cluster1-primary.pg-26033.svc' port=5432 sslmode='verify-ca' sslrootcert='/pgconf/tls/ca.crt' dbname=myapp
subslotname         | pgo_lr_slot_l1_myapp_875a65d6
subsynccommit       | off
subpublications     | {pgo_lr_pub_l1_myapp_875a65d6}
suborigin           | any
</code></pre>
<p>Because <code>pg_subscription</code> is a <strong>shared</strong> catalog, so you can see every subscription from any database. You need run <code>ALTER SUBSCRIPTION</code> in the database referenced in <code>subdbid</code>.</p>
<figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="sql" data-theme="github-light github-dark"><code data-language="sql" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">postgres</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"># </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">select</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> datname </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">from</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> pg_database </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">where</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> oid</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> =</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 16502</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> datname</span></span>
<span data-line=""><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">---------</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> myapp</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> row</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">postgres</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"># \c myapp</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">You are </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">now</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> connected </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">to</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> database</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "myapp"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> as</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> user </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"postgres"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">myapp</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"># </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">alter</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> subscription </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"pgo_lr_sub_l1_myapp_875a65d6"</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> enable</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">;</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">ALTER</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> SUBSCRIPTION</span></span></code></pre></figure> ]]></description>
    <pubDate>Tue, 18 Aug 2026 08:14:12 GMT</pubDate>
  </item><item>
    <title>Fixing logical replication after DDL</title>
    <link>https://ege.dev/wiki/fixing-logical-replication-after-ddl?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
    <guid>https://ege.dev/wiki/fixing-logical-replication-after-ddl</guid>
    <description><![CDATA[ <pre><code>ERROR:  logical replication target relation "public.t1" is missing replicated column: "b"
</code></pre>
<p>DDL breaks logical replication because they are not replicated and apply workers start to fail. Rather than reseeding, you can just execute the same DDL on logical replica and re-enable subscription.</p>
<pre><code>test=# ALTER SYSTEM SET default_transaction_read_only TO off;
ALTER SYSTEM

test=# SELECT pg_reload_conf();
 pg_reload_conf
----------------
 t
(1 row)

test=# alter table t1 add column b int;
ALTER TABLE


test=# ALTER SUBSCRIPTION pgo_lr_sub_logical_test_274c8e45 ENABLE;
ALTER SUBSCRIPTION

test=# select subname, subenabled from pg_subscription;
             subname              | subenabled
----------------------------------+------------
 pgo_lr_sub_logical_test_274c8e45 | t
(1 row)

test=# select * from t1;
   id   |     a      | b
--------+------------+---
 100500 |            |
 100501 |            |
 100502 |            |
 100503 |            |
 100504 |            |
 100505 | new column |
 100506 | a          | 1
(7 rows)
</code></pre> ]]></description>
    <pubDate>Mon, 10 Aug 2026 18:00:43 GMT</pubDate>
  </item><item>
    <title>Monitoring logical replication</title>
    <link>https://ege.dev/wiki/monitoring-logical-replication?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
    <guid>https://ege.dev/wiki/monitoring-logical-replication</guid>
    <description><![CDATA[ <p>After setting up the logical replica, any DDL on the primary is going to break the replication.</p>
<p>You’ll see an error like:</p>
<pre><code>2026-08-10 15:28:23.867 UTC [427] ERROR:  logical replication target relation "public.t1" is missing replicated column: "a"
</code></pre>
<p>There’s no way to check this error except from the log.</p>
<p><code>pg_stat_subscription_stats.apply_error_count</code> will increase every 5 seconds as the apply worker spawns and fails. Every 5 seconds seems not configurable.</p>
<p>There is an option to disable subscription on errors:</p>
<figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="sql" data-theme="github-light github-dark"><code data-language="sql" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">ALTER</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> SUBSCRIPTION ... </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">SET</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (disable_on_error </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> true)</span></span></code></pre></figure>
<p>With <code>disable_on_error</code>, <code>pg_subscription.subenabled</code> will be set to <code>false</code> if there are any errors.</p> ]]></description>
    <pubDate>Mon, 10 Aug 2026 15:59:51 GMT</pubDate>
  </item><item>
    <title>Event Designators Cheat Sheet</title>
    <link>https://ege.dev/wiki/event-designators-cheat-sheet?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
    <guid>https://ege.dev/wiki/event-designators-cheat-sheet</guid>
    <description><![CDATA[ <h1 id="shell--event-designator-cheat-sheet">shell <code>!</code> (event designator) cheat sheet<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#shell--event-designator-cheat-sheet" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h1>
<p>based on <a href="https://refp.se/articles/your-shell-and-the-lazy-exclamation-mark" class="external">“a shell exclamation mark is not for yelling. be lazy.”<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> by filip roséen. applies to interactive <code>bash</code>, <code>csh</code>, <code>tcsh</code>, <code>zsh</code> — not scripts.</p>
<h2 id="anatomy">anatomy<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#anatomy" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<pre><code>![event][:word][:modifier]
    |      |        |
    |      |        '--> modifier    [ :h :t :r :e ... ]
    |      '-----------> which part  [ :0 :$ :* :2-3 ... ]
    '------------------> which line  [ !! !-2 !ssh !?needle? ... ]
</code></pre>
<p><code>!</code> followed directly by <code>:</code> refers to the previous line.</p>
<h2 id="event-designators--which-line">event designators — which line<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#event-designators--which-line" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>





































<table><thead><tr><th>syntax</th><th>meaning</th></tr></thead><tbody><tr><td><code>!!</code></td><td>previous command</td></tr><tr><td><code>!-2</code></td><td>two lines back</td></tr><tr><td><code>!1337</code></td><td>line 1337 from <code>history</code></td></tr><tr><td><code>!ssh</code></td><td>most recent line starting with <code>ssh</code></td></tr><tr><td><code>!?needle?</code></td><td>most recent line containing <code>needle</code></td></tr><tr><td><code>!#</code></td><td>the current line, as typed so far</td></tr><tr><td><code>^old^new^</code></td><td>rerun previous command with first <code>old</code> → <code>new</code></td></tr></tbody></table>
<h2 id="word-designators--which-part">word designators — which part<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#word-designators--which-part" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>example previous line: <code>/path/to/script.sh "hello world" --enable 1337</code></p>













































<table><thead><tr><th>syntax</th><th>selects</th><th>result</th></tr></thead><tbody><tr><td><code>!:0</code></td><td>command word</td><td><code>/path/to/script.sh</code></td></tr><tr><td><code>!:1</code></td><td>2nd word (1st arg)</td><td><code>hello world</code></td></tr><tr><td><code>!:$</code></td><td>last word</td><td><code>1337</code></td></tr><tr><td><code>!:1-2</code></td><td>range</td><td><code>hello world --enable</code></td></tr><tr><td><code>!:*</code></td><td>all args</td><td><code>hello world --enable 1337</code></td></tr><tr><td><code>!:1-</code></td><td>all args but last</td><td><code>hello world --enable</code></td></tr><tr><td><code>!:2*</code></td><td>3rd word through last</td><td><code>--enable 1337</code></td></tr></tbody></table>
<p>short forms: <code>!$</code> = <code>!:$</code>, <code>!*</code> = <code>!:*</code>.</p>
<h2 id="modifiers--transform-the-part">modifiers — transform the part<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#modifiers--transform-the-part" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>





































<table><thead><tr><th>syntax</th><th>effect</th></tr></thead><tbody><tr><td><code>:h</code></td><td>strip filename (like <code>dirname</code>)</td></tr><tr><td><code>:t</code></td><td>strip leading path (like <code>basename</code>)</td></tr><tr><td><code>:r</code></td><td>strip extension</td></tr><tr><td><code>:e</code></td><td>keep only extension</td></tr><tr><td><code>:s/a/b/</code></td><td>replace first <code>a</code> with <code>b</code></td></tr><tr><td><code>:gs/a/b/</code></td><td>replace all <code>a</code> with <code>b</code></td></tr><tr><td><code>:p</code></td><td>print, don’t run (e.g. <code>!ssh:p</code>)</td></tr></tbody></table>
<h2 id="the-four-worth-memorizing">the four worth memorizing<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#the-four-worth-memorizing" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>

























<table><thead><tr><th>syntax</th><th>use case</th></tr></thead><tbody><tr><td><code>!$</code></td><td>last argument of previous command</td></tr><tr><td><code>!:0</code></td><td>rerun that annoyingly located script</td></tr><tr><td><code>!$:h</code></td><td>directory part of last argument</td></tr><tr><td><code>!$:t</code></td><td>filename part of last argument</td></tr></tbody></table>
<h2 id="everyday-combos">everyday combos<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#everyday-combos" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="shell" data-theme="github-light github-dark"><code data-language="shell" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> apt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> pkg</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">          # permission denied</span></span>
<span data-line=""><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> !!</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">                  # rerun with sudo</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> mkdir</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /var/mnt/cache</span></span>
<span data-line=""><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> !</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">$                    </span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># cd into it</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> touch</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ~/projects/work/awesome.sh</span></span>
<span data-line=""><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> !</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">:h</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">                  # cd to its directory</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ssh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10.240.33.109</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -p2222</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ~/.ssh/prod/ed25519</span></span>
<span data-line=""><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ssh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10.240.33.110</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> !:2</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">*</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">   # same flags, other host</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> ffmpeg</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> -i</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> /rec/day.mov</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> !#:2:r.mkv</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">   # reuse arg from current line, swap ext</span></span>
<span data-line=""><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> scp</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> !</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">$</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">:r.</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">*</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> example.com:/media</span></span></code></pre></figure>
<h2 id="posix-fallback-fc">posix fallback: <code>fc</code><a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#posix-fallback-fc" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>works in any posix shell (except truly minimal ones like <code>dash</code> / busybox <code>ash</code>). edits history in <code>$FCEDIT</code> (fallback <code>ed</code>; many shells use <code>$EDITOR</code>).</p>









































<table><thead><tr><th>syntax</th><th>effect</th></tr></thead><tbody><tr><td><code>fc</code></td><td>edit previous command in editor, then run</td></tr><tr><td><code>fc -2</code></td><td>edit command 2 back</td></tr><tr><td><code>fc grep</code></td><td>edit last command starting with <code>grep</code></td></tr><tr><td><code>fc -3 -1</code></td><td>last three commands in one buffer</td></tr><tr><td><code>fc ssh -1</code></td><td>from last <code>ssh</code> line through most recent</td></tr><tr><td><code>fc -s ssh</code></td><td>rerun last <code>ssh</code> command, no editor</td></tr><tr><td><code>fc -s a=b ssh</code></td><td>rerun last <code>ssh</code> command with <code>a</code> → <code>b</code></td></tr><tr><td><code>fc -e 'sed -i s/x/y/g' -3 -1</code></td><td>rerun last 3 cmds through a non-interactive “editor”</td></tr></tbody></table>
<h2 id="turning-it-off--customizing">turning it off / customizing<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#turning-it-off--customizing" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="shell" data-theme="github-light github-dark"><code data-language="shell" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">set</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> +H</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">                 # bash: disable history expansion</span></span>
<span data-line=""><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">setopt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> nobanghist</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">      # zsh: same</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">histchars</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'%^#'</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">        # change trigger chars (event, substitution, comment)</span></span></code></pre></figure>
<p>common gotcha: <code>echo "!dlrow olleh"</code> → <code>event not found</code> (double quotes don’t protect <code>!</code>; single quotes do).</p> ]]></description>
    <pubDate>Sat, 08 Aug 2026 09:38:34 GMT</pubDate>
  </item><item>
    <title>Mutating a slice in struct</title>
    <link>https://ege.dev/wiki/mutating-a-slice-in-struct?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
    <guid>https://ege.dev/wiki/mutating-a-slice-in-struct</guid>
    <description><![CDATA[ <figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="go" data-theme="github-light github-dark"><code data-language="go" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">package</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> main</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">fmt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">type</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Bar</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">	Bar </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">string</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">type</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Bars</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> []</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Bar</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">type</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Foo</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> struct</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">	Bars </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Bars</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">func</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> main</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">() {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">	f </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Foo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{Bars: []</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Bar</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{{Bar: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"ege"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}}}</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">	fmt.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Foo: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">%+v\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, f)</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">	for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> _, e </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> range</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> f.Bars {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">		e.Bar </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "gule"</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">	}</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">	fmt.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Foo: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">%+v\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, f)</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">	f </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> Foo</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{Bars: []</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Bar</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{{Bar: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"ege"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}}}</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">	fmt.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Foo: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">%+v\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, f)</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">	for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> i, _ </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> range</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> f.Bars {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">		x </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &#x26;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">f.Bars[i]</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">		x.Bar </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF"> "gule"</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">	}</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">	fmt.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Foo: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">%+v\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, f)</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></figure>
<pre><code>Foo: {Bars:[{Bar:ege}]}
Foo: {Bars:[{Bar:ege}]}
Foo: {Bars:[{Bar:ege}]}
Foo: {Bars:[{Bar:gule}]}
</code></pre> ]]></description>
    <pubDate>Sat, 01 Aug 2026 08:40:00 GMT</pubDate>
  </item><item>
    <title>http.Server</title>
    <link>https://ege.dev/wiki/http.server?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
    <guid>https://ege.dev/wiki/http.server</guid>
    <description><![CDATA[ <h2 id="graceful-shutdown">Graceful shutdown<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#graceful-shutdown" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="go" data-theme="github-light github-dark"><code data-language="go" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">server </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &#x26;</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">http</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Server</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{Addr: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">":8080"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, Handler: handler}</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    </span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">go</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> func</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">() {</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> err </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> server.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">ListenAndServe</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(); err </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> nil</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span data-line=""><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">        // handle err</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}()</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// Setting up signal capturing</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">stop </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> make</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">chan</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> os</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Signal</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">signal.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Notify</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(stop, os.Interrupt)</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// Waiting for SIGINT (kill -2)</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">stop</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">ctx, cancel </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> context.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">WithTimeout</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(context.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Background</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(), </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">5</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">*</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">time.Second)</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">defer</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> cancel</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">()</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> err </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> server.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Shutdown</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(ctx); err </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">!=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> nil</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span data-line=""><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">    // handle err</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    </span></span>
<span data-line=""><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// Wait for ListenAndServe goroutine to close.</span></span></code></pre></figure> ]]></description>
    <pubDate>Sat, 01 Aug 2026 08:37:46 GMT</pubDate>
  </item><item>
    <title>Binary Search</title>
    <link>https://ege.dev/wiki/binary-search?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
    <guid>https://ege.dev/wiki/binary-search</guid>
    <description><![CDATA[ <figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="go" data-theme="github-light github-dark"><code data-language="go" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">package</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> main</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">import</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (</span></span>
<span data-line=""><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">	"</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">fmt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// binarySearch performs binary search on a sorted slice.</span></span>
<span data-line=""><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">// It returns the index of target if present, or -1 if not found.</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">func</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> binarySearch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">slice</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> []</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">int</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70">target</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> int</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">int</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    low </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 0</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    high </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> len</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(slice) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> low </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> high {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        mid </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> low </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> (high</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">low)</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">/</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">2</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> slice[mid] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">==</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> target {</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">            return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> mid</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">        if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> slice[mid] </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">&#x3C;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> target {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            low </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> mid </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">            high </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> mid </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">-</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 1</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        }</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    return</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> -</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"> // target not found</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">func</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> main</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">() {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    slice </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> []</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">int</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">2</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">3</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">4</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">40</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    target </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 10</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    result </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> binarySearch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(slice, target)</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">    if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> result </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">!=</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> -</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        fmt.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Printf</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Element found at index </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">%d\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, result)</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    } </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">else</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">        fmt.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Println</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Element not found in the slice"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    }</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></figure> ]]></description>
    <pubDate>Sat, 01 Aug 2026 08:31:37 GMT</pubDate>
  </item><item>
    <title>time.Ticker</title>
    <link>https://ege.dev/wiki/time.ticker?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
    <guid>https://ege.dev/wiki/time.ticker</guid>
    <description><![CDATA[ <h2 id="simple">Simple<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#simple" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="go" data-theme="github-light github-dark"><code data-language="go" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">ticker </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> time.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">NewTicker</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">5</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> time.Second)</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">for</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> range</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ticker.C {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">	log.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Println</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"Hey!"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></figure>
<h2 id="with-timeout">With timeout<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#with-timeout" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="go" data-theme="github-light github-dark"><code data-language="go" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">ticker </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> time.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">NewTicker</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">5</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> time.Second)</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">defer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> ticker.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Stop</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">()</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">timeout </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> time.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">NewTimer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">300</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> *</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> time.Second)</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">defer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> timeout.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Stop</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">()</span></span>
<span data-line=""> </span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">	select</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> {</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">	case</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &#x3C;-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">timeout.C:</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">		return</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> errors.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">New</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">"timeout"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">	case</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583"> &#x3C;-</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">ticker.C:</span></span>
<span data-line=""><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">		// do</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">	}</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></figure> ]]></description>
    <pubDate>Sat, 01 Aug 2026 08:30:37 GMT</pubDate>
  </item><item>
    <title>bytes.Buffer</title>
    <link>https://ege.dev/wiki/bytes.buffer?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss</link>
    <guid>https://ege.dev/wiki/bytes.buffer</guid>
    <description><![CDATA[ <h2 id="direct-initialization-vs-pre-allocated-buffer">Direct Initialization vs Pre-allocated Buffer<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#direct-initialization-vs-pre-allocated-buffer" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p><strong>First Approach</strong>:</p>
<figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="go" data-theme="github-light github-dark"><code data-language="go" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">w </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> bytes</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">Buffer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">{}</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">w.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">WriteString</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(itemType)</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">w.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">WriteRune</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">)</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">w.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">WriteString</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(clientId)</span></span></code></pre></figure>
<p><strong>Second Approach</strong>:</p>
<figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="go" data-theme="github-light github-dark"><code data-language="go" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">l </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> len</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(itemType) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> len</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(clientId) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> len</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(id) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 2</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">buf </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> make</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">([]</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">byte</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, l)</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">w </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> bytes.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">NewBuffer</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(buf)</span></span></code></pre></figure>
<h2 id="key-differences">Key Differences<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#key-differences" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p><strong>Memory Allocation</strong>:</p>
<ul>
<li>The first approach uses bytes.Buffer’s internal 64-byte array for small strings</li>
<li>The second approach pre-allocates a specific buffer size based on the final string length</li>
</ul>
<p><strong>Performance Characteristics</strong>:</p>
<ul>
<li>First approach: 2 allocations (one for buffer structure, one for String() conversion)</li>
<li>Second approach: 3 allocations (initial slice, buffer structure, and String() conversion)</li>
</ul>
<p><strong>Use Cases</strong>:</p>
<ul>
<li>
<p>First approach is better for:</p>
<ul>
<li>Small strings that fit within the 64-byte internal buffer</li>
<li>When exact size is unknown</li>
<li>Simpler code with fewer allocations</li>
</ul>
</li>
<li>
<p>Second approach is better for:</p>
<ul>
<li>Large strings where size is known</li>
<li>When you want to control initial capacity</li>
<li>Cases where memory efficiency is critical</li>
</ul>
</li>
</ul>
<h1 id="buffer-in-the-first-approach-automatically-grows-when-writing-more-than-64-bytes">Buffer in the first approach automatically grows when writing more than 64 bytes.<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#buffer-in-the-first-approach-automatically-grows-when-writing-more-than-64-bytes" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h1>
<h2 id="internal-buffer-management">Internal Buffer Management<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#internal-buffer-management" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p><strong>Initial State</strong>:</p>
<ul>
<li>A zero-value bytes.Buffer starts with a small internal array of 64 bytes (smallBufferSize)</li>
<li>This is an optimization for small strings to avoid initial allocations</li>
</ul>
<p><strong>Growth Mechanism</strong>:</p>
<ul>
<li>When writing data, the buffer first tries to grow by reslicing</li>
<li>If reslicing isn’t possible, it calls the grow() function</li>
<li>For empty buffers under 64 bytes, it allocates exactly smallBufferSize</li>
<li>For larger sizes, it doubles the capacity when more space is needed</li>
</ul>
<h2 id="growth-algorithm">Growth Algorithm<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#growth-algorithm" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>The buffer grows according to these rules:</p>
<ol>
<li>First attempts to use the internal 64-byte array</li>
<li>When that’s exceeded, allocates a new slice with formula:</li>
</ol>
<figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="go" data-theme="github-light github-dark"><code data-language="go" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">if</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> c </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">:=</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 2</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">*</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cap</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(b.buf) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">+</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8"> n; c </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">></span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF"> 2</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">*</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0">cap</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">(b.buf) {</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">    buf </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">=</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0"> make</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">([]</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583">byte</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, n, c)</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">}</span></span></code></pre></figure> ]]></description>
    <pubDate>Sat, 01 Aug 2026 08:25:32 GMT</pubDate>
  </item>
    </channel>
  </rss>