<?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 DevOps Brain 🧠</title><link>https://devopsbrain.ru/tags/go/</link><description>Recent content in Go on DevOps Brain 🧠</description><generator>Hugo</generator><language>en-us</language><copyright>© It Cat</copyright><lastBuildDate>Tue, 03 Nov 2026 14:00:00 +0300</lastBuildDate><atom:link href="https://devopsbrain.ru/tags/go/index.xml" rel="self" type="application/rss+xml"/><item><title>Expr для Go: динамические правила вместо цепочек if</title><link>https://devopsbrain.ru/posts/2026-11-03-expr-lang-in-go/</link><pubDate>Tue, 03 Nov 2026 14:00:00 +0300</pubDate><guid>https://devopsbrain.ru/posts/2026-11-03-expr-lang-in-go/</guid><description>&lt;p>Сегодня я хочу немного отойти от типичных тем канала и поговорить о разработке на Go, а именно о библиотеке Expr и задачах, которые она решает.&lt;/p>
&lt;p>Вы уже наверняка написали какое-то количество сервисов или программ, дополняющих вашу инфраструктуру на GoLang. Почти у каждого такого сервиса есть конфигурация. Например:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">min_replicas&lt;/span>: &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">max_error_rate&lt;/span>: &lt;span style="color:#ae81ff">0.05&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Типичная обработка этого выглядит примерно так:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-go" data-lang="go">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">if&lt;/span> &lt;span style="color:#a6e22e">readyReplicas&lt;/span> &lt;span style="color:#f92672">&amp;gt;=&lt;/span> &lt;span style="color:#a6e22e">cfg&lt;/span>.&lt;span style="color:#a6e22e">MinReplicas&lt;/span> &lt;span style="color:#f92672">&amp;amp;&amp;amp;&lt;/span> &lt;span style="color:#a6e22e">errorRate&lt;/span> &amp;lt; &lt;span style="color:#a6e22e">cfg&lt;/span>.&lt;span style="color:#a6e22e">MaxErrorRate&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>	&lt;span style="color:#75715e">// продолжаем операцию&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Пока конфигурация небольшая, этого достаточно. Но затем меняется уже форма правила: в production нужны три реплики, в остальных окружениях достаточно одной; во время maintenance проверку нужно пропустить; error rate учитывается только для части сервисов. В конфигурации появляются новые флаги и через некоторое время вы обнаруживаете кучу вложенных &lt;code>if&lt;/code>, что делает код просто нечитабельным.&lt;/p></description></item></channel></rss>