<?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>Air auf cbrueggenolte.de</title>
    <link>https://cbrueggenolte.de/tags/air/</link>
    <description>Neueste Beiträge in Air auf cbrueggenolte.de</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>de-DE</language>
    <managingEditor>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</managingEditor>
    <webMaster>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</webMaster>
    <copyright>2018-2026 cbrueggenolte</copyright>
    <lastBuildDate>Sun, 11 Oct 2026 12:56:32 +0200</lastBuildDate>
    <atom:link href="https://cbrueggenolte.de/tags/air/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Live Reloading in Go</title>
      <link>https://cbrueggenolte.de/live-reloading-in-go/</link>
      <pubDate>Sun, 11 Oct 2026 12:56:32 +0200</pubDate><author>96ca5227@cbrueggenolte.de (cbrueggenolte.de)</author>
      <guid>https://cbrueggenolte.de/live-reloading-in-go/</guid>
      <description>&lt;p&gt;Mich stört es, nach jeder kleinen Änderung im Code das Programm von Hand zu stoppen und neu zu starten. Vor allem, wenn man mitten in einem Tutorial ist und häufig Änderungen macht. Ich möchte speichern und sofort sehen, was passiert. Genau dafür gibt es Live Reloading: Sobald sich eine Quelldatei ändert, startet die Anwendung von selbst neu.&lt;/p&gt;&#xA;&lt;p&gt;Aus der Frontend-Entwicklung kennt man das schon lange. Für Go verwende ich dafür &lt;a href=&#34;https://github.com/air-verse/air&#34;&gt;Air&lt;/a&gt;. Ich starte es einmal im Projektordner und kann mich danach ganz auf den Code konzentrieren.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Mich stört es, nach jeder kleinen Änderung im Code das Programm von Hand zu stoppen und neu zu starten. Vor allem, wenn man mitten in einem Tutorial ist und häufig Änderungen macht. Ich möchte speichern und sofort sehen, was passiert. Genau dafür gibt es Live Reloading: Sobald sich eine Quelldatei ändert, startet die Anwendung von selbst neu.</p>
<p>Aus der Frontend-Entwicklung kennt man das schon lange. Für Go verwende ich dafür <a href="https://github.com/air-verse/air">Air</a>. Ich starte es einmal im Projektordner und kann mich danach ganz auf den Code konzentrieren.</p>
<h2 id="installation">Installation</h2>
<p>Air setzt mindestens Go 1.25 voraus. Deshalb prüfe ich zuerst meine Go-Version und installiere Air dann mit <code>go install</code>:</p>





<pre tabindex="0"><code>go version
// go version go1.25.x linux/amd64

go install github.com/air-verse/air@latest</code></pre><p>Wenn der Befehl <code>air</code> danach nicht gefunden wird, fehlt das Go-Bin-Verzeichnis im <code>PATH</code>:</p>





<pre tabindex="0"><code>export PATH=&#34;$PATH:$(go env GOPATH)/bin&#34;</code></pre><h2 id="ein-kleines-testprojekt">Ein kleines Testprojekt</h2>
<p>Zum Ausprobieren lege ich mir ein kleines Projekt an:</p>





<pre tabindex="0"><code>mkdir air-example &amp;&amp; cd $_
go mod init example/air
touch main.go

code .</code></pre><p>In die <code>main.go</code> kommt ein einfaches Hello World:</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="ln">1</span><span class="cl"><span class="kn">package</span><span class="w"> </span><span class="nx">main</span><span class="w">
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="kn">import</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="w">    </span><span class="s">&#34;fmt&#34;</span><span class="w">
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="kd">func</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="w">    </span><span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Hello Air!&#34;</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="ln">9</span><span class="cl"><span class="p">}</span></span></span></code></pre></div><h2 id="air-in-aktion">Air in Aktion</h2>
<p>Im Projektordner gebe ich jetzt einfach <code>air</code> ein. Air baut das Programm, startet es, und im Terminal erscheint <code>Hello Air!</code>.</p>
<p>Danach ändere ich den Text in <code>Hello, Air!!</code> und speichere die Datei. Air bemerkt die Änderung, baut das Programm neu und zeigt sofort die neue Ausgabe. Mehr ist es im Grunde nicht.</p>
<p>Bei Kommandozeilenprogrammen gab es allerdings einen Haken: Eingaben über <code>Scanf</code> hat Air zumindest in Version 1.51.0 nicht unterstützt. Bei Webanwendungen und Services spielt das keine Rolle, und gerade dort ist Air besonders praktisch.</p>
<h2 id="konfiguration">Konfiguration</h2>
<p>Wenn ich mehr einstellen möchte, lege ich mir eine <code>.air.toml</code> an:</p>





<pre tabindex="0"><code>air init</code></pre><p>Welche Optionen es gibt, zeigt die <a href="https://github.com/air-verse/air/blob/master/air_example.toml">Beispielkonfiguration</a>.</p>
<p>Übrigens: Der <code>tmp</code>-Ordner, der nach dem Start im Projekt auftaucht, stammt von Air. Darin liegt das kompilierte
Programm. Auch dieser Pfad lässt sich in der TOML-Datei anpassen.</p>
<h2 id="fazit">Fazit</h2>
<p>Air ist schnell eingerichtet und nimmt mir eine lästige Kleinigkeit ab. Ich speichere, warte einen Moment und sehe das Ergebnis. Gerade beim Durcharbeiten von Tutorials macht das für mich einen großen Unterschied. Wenn du in Go entwickelst, probier es ruhig mal aus.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
