123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- <?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 Max Wiki Site</title><link>https://maxtar.github.io/programming/go/</link><description>Recent content in Go on Max Wiki Site</description><generator>Hugo</generator><language>ru-RU</language><lastBuildDate>Sun, 09 Oct 2022 01:46:24 +0300</lastBuildDate><atom:link href="https://maxtar.github.io/programming/go/index.xml" rel="self" type="application/rss+xml"/><item><title>Полезные программы на Go</title><link>https://maxtar.github.io/programming/go/useful-programs/</link><pubDate>Sun, 09 Oct 2022 01:46:24 +0300</pubDate><guid>https://maxtar.github.io/programming/go/useful-programs/</guid><description><p>Различные программы, написанные на Go.</p>
- <div class="gdoc-toc gdoc-toc__level--6">
- <nav id="TableOfContents">
- <ul>
- <li>
- <ul>
- <li><a href="#разное">Разное</a></li>
- <li><a href="#консольные-приложения">Консольные приложения</a></li>
- <li><a href="#работа-с-файлами">Работа с файлами</a></li>
- <li><a href="#хранение-и-версионирование-кода">Хранение и версионирование кода</a></li>
- <li><a href="#нагрузочное-тестирование">Нагрузочное тестирование</a></li>
- <li><a href="#web">WEB</a></li>
- <li><a href="#рисование-графиков">Рисование графиков</a></li>
- <li><a href="#обработка-и-трансформация-данных">Обработка и трансформация данных</a></li>
- <li><a href="#сеть">Сеть</a></li>
- <li><a href="#мониторинг">Мониторинг</a></li>
- <li><a href="#служебные">Служебные</a></li>
- <li><a href="#работа-с-графикой">Работа с графикой</a></li>
- <li><a href="#работа-с-json">Работа с JSON</a></li>
- <li><a href="#работа-с-картами-координатами-и-тд">Работа с картами, координатами и т.д.</a></li>
- <li><a href="#общение">Общение</a></li>
- <li><a href="#соцсети-fediverse">Соцсети, fediverse</a></li>
- <li><a href="#безопасность">Безопасность</a></li>
- <li><a href="#базы-данных-и-прочее">Базы данных и прочее</a></li>
- </ul>
- </li>
- </ul>
- </nav>
- <hr />
- </div>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="разное"
- >
- Разное
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-programs/#разное" class="gdoc-page__anchor clip flex align-center" title=" Разное" aria-label=" Разное" href="#%d1%80%d0%b0%d0%b7%d0%bd%d0%be%d0%b5">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <ul>
- <li><a href="https://echo.labstack.com" target="_blank" >Простой Web Framework Echo<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a></li>
- <li><a href="https://github.com/peterhellberg/wiki" target="_blank" >Лёгкая wiki<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://ketchuphq.com" target="_blank" >Ketchup CMS<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>, <a href="https://github.com/ketchuphq/ketchup" target="_blank" >github<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/42wim/matterbridge" target="_blank" >matterbridge<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. Мост для объединения различных средств общения (slack, tegeram, mattermost и т.д.).</li>
- <li><a href="https://github.com/George3d6/Hermes" target="_blank" >Hermes<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - сервер для обмена файлами.</li>
- <li><a href="https://github.com/schollz/croc" target="_blank" >Croc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - клиент-сервер для посылки файлов.</li>
- <li>Go из Shell <a href="https://neugram.io/" target="_blank" >neugram<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li>Различные утилиты для проверки сетей (сканеры, парсеры сертификатов и т.д.) <a href="https://zmap.io/" target="_blank" >Zmap<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> <a href="https://github.com/zmap" target="_blank" >Github<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a></li>
- <li>Вывод дерева зависимостей <a href="https://github.com/KyleBanks/depth" target="_blank" >depth<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://kylewbanks.com/blog/visualize-golang-dependency-trees-with-depth" target="_blank" >Блог<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.
- <ul>
- <li>В графическом виде <a href="https://github.com/TrueFurby/go-callvis" target="_blank" >go-callvis<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- </ul>
- </li>
- <li><a href="https://github.com/claudiodangelis/qrcp" target="_blank" >qrcp<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - передача файлов с компа на мобилку, например, по QRCode.</li>
- <li><a href="https://magefile.org" target="_blank" >mage<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - замена make на Go. Исходники на <a href="https://github.com/magefile/mage" target="_blank" >GitHub<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- </ul>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="консольные-приложения"
- >
- Консольные приложения
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-programs/#консольные-приложения" class="gdoc-page__anchor clip flex align-center" title=" Консольные приложения" aria-label=" Консольные приложения" href="#%d0%ba%d0%be%d0%bd%d1%81%d0%be%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <ul>
- <li><a href="https://github.com/schachmat/wego" target="_blank" >wego<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - показ погоды в консоли.</li>
- </ul>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="работа-с-файлами"
- >
- Работа с файлами
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-programs/#работа-с-файлами" class="gdoc-page__anchor clip flex align-center" title=" Работа с файлами" aria-label=" Работа с файлами" href="#%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-%d1%84%d0%b0%d0%b9%d0%bb%d0%b0%d0%bc%d0%b8">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <ul>
- <li><a href="https://github.com/viktomas/godu" target="_blank" >godu<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - позволяет быстро просматривать каталоги с большим количеством файлов.</li>
- <li><a href="https://github.com/gokcehan/lf" target="_blank" >lf<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - консольный менеджер файлов на Go.</li>
- <li><a href="https://github.com/eltaline/wzd" target="_blank" >wzd<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - веб-сервер для работы с огромным количеством файлов.</li>
- <li><a href="https://github.com/muesli/duf" target="_blank" >duf<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - отображение информации про диски. Работает только под Unix.</li>
- <li><a href="https://github.com/kashav/fsql" target="_blank" >fsql<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - поиск файлов в виде SQL.</li>
- </ul>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="хранение-и-версионирование-кода"
- >
- Хранение и версионирование кода
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-programs/#хранение-и-версионирование-кода" class="gdoc-page__anchor clip flex align-center" title=" Хранение и версионирование кода" aria-label=" Хранение и версионирование кода" href="#%d1%85%d1%80%d0%b0%d0%bd%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b8-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%be%d0%bd%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%ba%d0%be%d0%b4%d0%b0">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <ul>
- <li>Система хранения и версионирования кода - <a href="https://gogs.io/" target="_blank" >Gogs<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://github.com/gogits/gogs" target="_blank" >Github<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://gitea.io" target="_blank" >Gitea<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - склонированная и расширенная версия Gogs. Разворачивается локально. Исходники на <a href="https://github.com/go-gitea/gitea" target="_blank" >GitHub<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/jesseduffield/lazygit" target="_blank" >Lazygit (https://github.com/jesseduffield/lazygit)<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. Консольный клиент для работы с git.</li>
- <li><a href="https://gitness.com" target="_blank" >Gitness<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - opensource проект. Разворачивается локально. <a href="https://github.com/harness/gitness" target="_blank" >GitHub<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- </ul>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="нагрузочное-тестирование"
- >
- Нагрузочное тестирование
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-programs/#нагрузочное-тестирование" class="gdoc-page__anchor clip flex align-center" title=" Нагрузочное тестирование" aria-label=" Нагрузочное тестирование" href="#%d0%bd%d0%b0%d0%b3%d1%80%d1%83%d0%b7%d0%be%d1%87%d0%bd%d0%be%d0%b5-%d1%82%d0%b5%d1%81%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <ul>
- <li><a href="https://github.com/loadimpact/k6" target="_blank" >K6<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://docs.k6.io/docs/running-k6" target="_blank" >Документация<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/tsenart/vegeta" target="_blank" >vegeta (https://github.com/tsenart/vegeta)<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - подключается, либо как библиотека, либо используется из командной строки.</li>
- </ul>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="web"
- >
- WEB
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-programs/#web" class="gdoc-page__anchor clip flex align-center" title=" WEB" aria-label=" WEB" href="#web">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <ul>
- <li><a href="https://caddyserver.com" target="_blank" >Caddy<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - лёгкий и быстрый http-сервер как Nginx или Apache. <a href="https://caddyserver.com" target="_blank" >Документация<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. Исходники на <a href="https://github.com/caddyserver/caddy" target="_blank" >github<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/fatedier/frp" target="_blank" >FRP<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - reverse-proxy.</li>
- <li><a href="https://github.com/casbin/casbin-forum" target="_blank" >Casbin forum<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - реализация форума на Go и ReactJS.</li>
- <li><a href="https://github.com/drakkan/sftpgo" target="_blank" >sftpgo<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - сервер, поддерживающий различные протоколы: SFTP, HTTP, FTP/S and WebDAV. И также различные системы хранения: local filesystem, encrypted local filesystem, S3 (compatible) Object Storage, Google Cloud Storage, Azure Blob Storage.</li>
- </ul>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="рисование-графиков"
- >
- Рисование графиков
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-programs/#рисование-графиков" class="gdoc-page__anchor clip flex align-center" title=" Рисование графиков" aria-label=" Рисование графиков" href="#%d1%80%d0%b8%d1%81%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b3%d1%80%d0%b0%d1%84%d0%b8%d0%ba%d0%be%d0%b2">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <p><a href="https://github.com/marianogappa/chart" target="_blank" >Chart<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - рисует график на основании данных из стандартного потока ввода. <a href="https://marianogappa.github.io/chart" target="_blank" >Примеры отображения<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://movio.co/blog/improving-with-sql-and-charts" target="_blank" >Статья об использовании<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</p></description></item><item><title>Полезные функции</title><link>https://maxtar.github.io/programming/go/useful-func/</link><pubDate>Wed, 05 Oct 2022 01:32:25 +0300</pubDate><guid>https://maxtar.github.io/programming/go/useful-func/</guid><description><div class="gdoc-toc gdoc-toc__level--6">
- <nav id="TableOfContents">
- <ul>
- <li>
- <ul>
- <li><a href="#перехват-ctrlc">Перехват Ctrl+C</a>
- <ul>
- <li><a href="#более-простой-вариант">Более простой вариант</a></li>
- </ul>
- </li>
- <li><a href="#как-правильно-реализовать-singletone">Как правильно реализовать Singletone</a></li>
- <li><a href="#ожидание-нажатия-enter-в-консоли">Ожидание нажатия Enter в консоли</a></li>
- <li><a href="#логирование-из-тестов">Логирование из тестов</a></li>
- <li><a href="#создание-собственного-типа-аргумента-командной-строки">Создание собственного типа аргумента командной строки</a></li>
- <li><a href="#удаление-элемента-из-slice">Удаление элемента из slice</a></li>
- <li><a href="#подключение-к-microsoft-iis-по-ssl">Подключение к Microsoft IIS по SSL</a></li>
- <li><a href="#вычисление-абсолютного-значения-целых-чисел">Вычисление абсолютного значения целых чисел</a></li>
- </ul>
- </li>
- </ul>
- </nav>
- <hr />
- </div>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="перехват-ctrlc"
- >
- Перехват Ctrl+C
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-func/#перехват-ctrlc" class="gdoc-page__anchor clip flex align-center" title=" Перехват Ctrl&#43;C" aria-label=" Перехват Ctrl&#43;C" href="#%d0%bf%d0%b5%d1%80%d0%b5%d1%85%d0%b2%d0%b0%d1%82-ctrlc">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <p>Информация взята из блога <a href="https://medium.com/@matryer/make-ctrl-c-cancel-the-context-context-bd006a8ad6ff" target="_blank" >Mat Ryer<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</p>
- <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
- </span></span><span class="line"><span class="cl"> <span class="nx">ctx</span> <span class="o">:=</span> <span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">()</span>
- </span></span><span class="line"><span class="cl">
- </span></span><span class="line"><span class="cl"> <span class="c1">// trap Ctrl#C and call cancel on the context
- </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">ctx</span><span class="p">,</span> <span class="nx">cancel</span> <span class="o">:=</span> <span class="nx">context</span><span class="p">.</span><span class="nf">WithCancel</span><span class="p">(</span><span class="nx">ctx</span><span class="p">)</span>
- </span></span><span class="line"><span class="cl"> <span class="nx">c</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">chan</span> <span class="nx">os</span><span class="p">.</span><span class="nx">Signal</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
- </span></span><span class="line"><span class="cl"> <span class="nx">signal</span><span class="p">.</span><span class="nf">Notify</span><span class="p">(</span><span class="nx">c</span><span class="p">,</span> <span class="nx">os</span><span class="p">.</span><span class="nx">Interrupt</span><span class="p">)</span>
- </span></span><span class="line"><span class="cl"> <span class="k">defer</span> <span class="kd">func</span><span class="p">()</span> <span class="p">{</span>
- </span></span><span class="line"><span class="cl"> <span class="nx">signal</span><span class="p">.</span><span class="nf">Stop</span><span class="p">(</span><span class="nx">c</span><span class="p">)</span>
- </span></span><span class="line"><span class="cl"> <span class="nf">cancel</span><span class="p">()</span>
- </span></span><span class="line"><span class="cl"> <span class="p">}()</span>
- </span></span><span class="line"><span class="cl"> <span class="k">go</span> <span class="kd">func</span><span class="p">()</span> <span class="p">{</span>
- </span></span><span class="line"><span class="cl"> <span class="k">select</span> <span class="p">{</span>
- </span></span><span class="line"><span class="cl"> <span class="k">case</span> <span class="o">&lt;-</span><span class="nx">c</span><span class="p">:</span>
- </span></span><span class="line"><span class="cl"> <span class="nf">cancel</span><span class="p">()</span>
- </span></span><span class="line"><span class="cl"> <span class="k">case</span> <span class="o">&lt;-</span><span class="nx">ctx</span><span class="p">.</span><span class="nf">Done</span><span class="p">():</span>
- </span></span><span class="line"><span class="cl"> <span class="p">}</span>
- </span></span><span class="line"><span class="cl"> <span class="p">}()</span>
- </span></span><span class="line"><span class="cl">
- </span></span><span class="line"><span class="cl"> <span class="nf">doSomethingAwesome</span><span class="p">(</span><span class="nx">ctx</span><span class="p">)</span>
- </span></span><span class="line"><span class="cl"><span class="p">}</span>
- </span></span></code></pre></div><div class="flex align-center gdoc-page__anchorwrap">
- <h3 id="более-простой-вариант"
- >
- Более простой вариант
- </h3>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-func/#более-простой-вариант" class="gdoc-page__anchor clip flex align-center" title=" Более простой вариант" aria-label=" Более простой вариант" href="#%d0%b1%d0%be%d0%bb%d0%b5%d0%b5-%d0%bf%d1%80%d0%be%d1%81%d1%82%d0%be%d0%b9-%d0%b2%d0%b0%d1%80%d0%b8%d0%b0%d0%bd%d1%82">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
- </span></span><span class="line"><span class="cl"> <span class="nx">c</span> <span class="o">:=</span> <span class="nb">make</span><span class="p">(</span><span class="kd">chan</span> <span class="nx">os</span><span class="p">.</span><span class="nx">Signal</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
- </span></span><span class="line"><span class="cl"> <span class="nx">signal</span><span class="p">.</span><span class="nf">Notify</span><span class="p">(</span><span class="nx">c</span><span class="p">,</span> <span class="nx">os</span><span class="p">.</span><span class="nx">Interrupt</span><span class="p">)</span>
- </span></span><span class="line"><span class="cl"><span class="c1">// Wait for Ctrl#C
- </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="o">&lt;-</span><span class="nx">c</span>
- </span></span><span class="line"><span class="cl"><span class="p">}</span>
- </span></span></code></pre></div><hr>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="как-правильно-реализовать-singletone"
- >
- Как правильно реализовать Singletone
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-func/#как-правильно-реализовать-singletone" class="gdoc-page__anchor clip flex align-center" title=" Как правильно реализовать Singletone" aria-label=" Как правильно реализовать Singletone" href="#%d0%ba%d0%b0%d0%ba-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d1%8c%d0%bd%d0%be-%d1%80%d0%b5%d0%b0%d0%bb%d0%b8%d0%b7%d0%be%d0%b2%d0%b0%d1%82%d1%8c-singletone">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <p>Вариант взят отсюда <a href="http://marcio.io/2015/07/singleton-pattern-in-go/" target="_blank" >singleton-pattern-in-go<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</p></description></item><item><title>Полезные библиотеки</title><link>https://maxtar.github.io/programming/go/useful-libs/</link><pubDate>Wed, 05 Oct 2022 00:55:20 +0300</pubDate><guid>https://maxtar.github.io/programming/go/useful-libs/</guid><description><div class="gdoc-toc gdoc-toc__level--6">
- <nav id="TableOfContents">
- <ul>
- <li>
- <ul>
- <li><a href="#конфигурация-и-всё-такое">Конфигурация и всё такое</a></li>
- <li><a href="#логгирование">Логгирование</a></li>
- <li><a href="#ui">UI</a>
- <ul>
- <li><a href="#пользовательский-интерфейс-в-терминале">Пользовательский интерфейс в терминале</a></li>
- <li><a href="#gui">GUI</a></li>
- </ul>
- </li>
- <li><a href="#консоль">Консоль</a></li>
- <li><a href="#работа-с-бд">Работа с БД</a></li>
- <li><a href="#работа-с-json-xml">Работа с json, XML</a></li>
- <li><a href="#html-парсинг-сайтов">HTML, парсинг сайтов</a></li>
- <li><a href="#работа-с-файлами">Работа с файлами</a></li>
- <li><a href="#тестирование">Тестирование</a>
- <ul>
- <li><a href="#генерация-данных">Генерация данных</a></li>
- </ul>
- </li>
- <li><a href="#шаблоны">Шаблоны</a></li>
- <li><a href="#http">HTTP</a></li>
- <li><a href="#web-приложения">WEB-приложения</a></li>
- <li><a href="#openapi">OpenAPI</a></li>
- <li><a href="#работа-с-сетью">Работа с сетью</a></li>
- <li><a href="#работа-со-строками">Работа со строками</a></li>
- <li><a href="#работа-со-временем">Работа со временем</a></li>
- <li><a href="#генерация-различных-id">Генерация различных ID</a></li>
- <li><a href="#работа-с-hardware">Работа с hardware</a></li>
- <li><a href="#сетевые-framework">Сетевые framework</a></li>
- <li><a href="#списки-и-наборы">Списки и наборы</a></li>
- <li><a href="#игры">Игры</a></li>
- <li><a href="#графика">Графика</a></li>
- <li><a href="#видео">Видео</a></li>
- <li><a href="#статистика-и-математика">Статистика и математика</a></li>
- <li><a href="#обработка-данных-на-потоке-и-прочее">Обработка данных на потоке и прочее</a></li>
- <li><a href="#парсеры">Парсеры</a></li>
- <li><a href="#коллекции">Коллекции</a></li>
- <li><a href="#встраивание-ресурсов-теперь-не-актуально-так-как-с-версии-16-есть-встроенный-механизм">Встраивание ресурсов (теперь не актуально, так как с версии 1.6 есть встроенный механизм)</a></li>
- <li><a href="#вспомогательные-утилиты">Вспомогательные утилиты</a></li>
- <li><a href="#работа-со-звуком">Работа со звуком</a></li>
- <li><a href="#мониторинг">Мониторинг</a></li>
- <li><a href="#opencv">OpenCV</a></li>
- <li><a href="#офис">Офис</a></li>
- <li><a href="#goroutines">goroutines</a></li>
- <li><a href="#шифровние">Шифровние</a></li>
- <li><a href="#события">События</a></li>
- <li><a href="#интеграция-с-другими-яп">Интеграция с другими ЯП</a></li>
- <li><a href="#разное">Разное</a></li>
- </ul>
- </li>
- </ul>
- </nav>
- <hr />
- </div>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="конфигурация-и-всё-такое"
- >
- Конфигурация и всё такое
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-libs/#конфигурация-и-всё-такое" class="gdoc-page__anchor clip flex align-center" title=" Конфигурация и всё такое" aria-label=" Конфигурация и всё такое" href="#%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%b8-%d0%b2%d1%81%d1%91-%d1%82%d0%b0%d0%ba%d0%be%d0%b5">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <ul>
- <li><a href="https://github.com/spf13/viper" target="_blank" >viper<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> Чтение и сохранение конфигурации в различных форматах.</li>
- <li><a href="https://github.com/spf13/cobra" target="_blank" >Работа с командной строкой: создание флагов командной строки в POSIX формате, автоматическая генерация &ldquo;как использовать&rdquo;<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/alecthomas/kingpin" target="_blank" >Kingpin<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - ещё одна реализация работы с флагами. <a href="https://godoc.org/github.com/alecthomas/kingpin" target="_blank" >Godoc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/integrii/flaggy" target="_blank" >Flaggy<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. Также работа с командной, возможность создания подкоманд. <a href="https://godoc.org/github.com/integrii/flaggy" target="_blank" >Godoc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/micro/go-config" target="_blank" >Go-Config<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. Позволяет собирать конфигурацию из различных источников (файлы, командная строка и т.д.). <a href="https://godoc.org/github.com/micro/go-config" target="_blank" >Godoc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://micro.mu/blog/2018/07/04/go-config.html" target="_blank" >Описание в блоге<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/tkanos/gonfig" target="_blank" >Gonfig<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - позволяет читать конфигурацию из json и переменных окружения.</li>
- <li><a href="https://github.com/moogar0880/venom" target="_blank" >Venom<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. Также позволяет конфигурировать из различных источников. <a href="https://godoc.org/github.com/moogar0880/venom" target="_blank" >GoDoc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li>Реализация формата <a href="https://github.com/lightbend/config/blob/master/HOCON.md" target="_blank" >HOCON<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> <a href="https://github.com/go-akka/configuration" target="_blank" >configuration<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://godoc.org/github.com/go-akka/configuration" target="_blank" >GoDoc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/go-yaml/yaml" target="_blank" >Yaml<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - работа с YAML от <a href="https://www.canonical.com/" target="_blank" >Canonical<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://gopkg.in/yaml.v3" target="_blank" >API<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://blog.ubuntu.com/2019/04/05/api-v3-of-the-yaml-package-for-go-is-available" target="_blank" >Blog<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/manifoldco/promptui" target="_blank" >promptui<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - позволяет запрашивать у пользователя информацию в процессе работает. Интегрируется, например с <a href="https://github.com/spf13/cobra" target="_blank" >cobra<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> и другими подобными библиотеками. <a href="https://pkg.go.dev/github.com/manifoldco/promptui?tab=doc" target="_blank" >GoDoc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/urfave/cli" target="_blank" >cli<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - ещё одна библиотека для расширения флагов командной строки. <a href="https://pkg.go.dev/github.com/urfave/cli?tab=doc" target="_blank" >GoDoc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/knadh/koanf" target="_blank" >koanf<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - позиционируется как более легковесный конкурент <a href="https://github.com/spf13/viper" target="_blank" >viper<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- </ul>
- <hr>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="логгирование"
- >
- Логгирование
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-libs/#логгирование" class="gdoc-page__anchor clip flex align-center" title=" Логгирование" aria-label=" Логгирование" href="#%d0%bb%d0%be%d0%b3%d0%b3%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <ul>
- <li>Библиотека от Google <a href="https://github.com/golang/glog" target="_blank" >Glog<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://godoc.org/github.com/golang/glog" target="_blank" >Документация<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li>Библиотека от juju <a href="https://github.com/juju/loggo" target="_blank" >Loggo<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://godoc.org/github.com/juju/loggo" target="_blank" >Документация<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li>Библиотека от Uber <a href="https://github.com/uber-go/zap" target="_blank" >Zap<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://godoc.org/go.uber.org/zap" target="_blank" >Документация<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/sirupsen/logrus" target="_blank" >Logrus<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. Наверное наиболее популярный. Используется в Docker. <a href="https://godoc.org/github.com/sirupsen/logrus" target="_blank" >API<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li>Вроде как самая маленькая библиотека <a href="https://github.com/op/go-logging" target="_blank" >go-logging<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://godoc.org/github.com/op/go-logging" target="_blank" >API<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/rs/zerolog" target="_blank" >zerolog<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - логирование в формате json. <a href="https://godoc.org/github.com/rs/zerolog" target="_blank" >GoDoc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. Также может логировать в нормальном виде.</li>
- <li><a href="https://github.com/davecgh/go-spew" target="_blank" >go-spew<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - красивый вывод в консоль данных для отладки. <a href="https://pkg.go.dev/github.com/davecgh/go-spew@v1.1.1/spew?tab=doc" target="_blank" >GoDoc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/henvic/httpretty" target="_blank" >httpretty<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - удобное логирование в консоль http запросов как на сервере, так и на клиенте. <a href="https://pkg.go.dev/github.com/henvic/httpretty?tab=doc" target="_blank" >GoDoc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/m-mizutani/zlog" target="_blank" >zlog<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - логер позволяет скрывать чувствительную информацию из логирования. <a href="https://pkg.go.dev/github.com/m-mizutani/zlog@v0.2.0" target="_blank" >GoDoc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- <li><a href="https://github.com/charmbracelet/log" target="_blank" >Log<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> - простенький логер с подсветкой вывода от создателей <a href="https://github.com/charmbracelet/bubbletea" target="_blank" >Bubble Tea<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>. <a href="https://pkg.go.dev/github.com/charmbracelet/log" target="_blank" >GoDoc<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</li>
- </ul>
- <hr>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="ui"
- >
- UI
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-libs/#ui" class="gdoc-page__anchor clip flex align-center" title=" UI" aria-label=" UI" href="#ui">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h3 id="пользовательский-интерфейс-в-терминале"
- >
- Пользовательский интерфейс в терминале
- </h3>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/useful-libs/#пользовательский-интерфейс-в-терминале" class="gdoc-page__anchor clip flex align-center" title=" Пользовательский интерфейс в терминале" aria-label=" Пользовательский интерфейс в терминале" href="#%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d1%82%d0%b5%d0%bb%d1%8c%d1%81%d0%ba%d0%b8%d0%b9-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d1%84%d0%b5%d0%b9%d1%81-%d0%b2-%d1%82%d0%b5%d1%80%d0%bc%d0%b8%d0%bd%d0%b0%d0%bb%d0%b5">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <p><a href="https://appliedgo.net/tui" target="_blank" >Отличная статья<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a> с обзором разных библиотек для написания text-based GUI.</p></description></item><item><title>Internationalization (i18n) и Localization (l10n) в Go</title><link>https://maxtar.github.io/programming/go/i18n-i10n/</link><pubDate>Sun, 02 Oct 2022 14:59:08 +0300</pubDate><guid>https://maxtar.github.io/programming/go/i18n-i10n/</guid><description><p>Информация взята <a href="https://phraseapp.com/blog/posts/internationalization-i18n-go" target="_blank" >отсюда<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a></p>
- <p><a href="https://github.com/nicksnyder/go-i18n" target="_blank" >Альтернативный пакет (https://github.com/nicksnyder/go-i18n)<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a>.</p>
- <div class="gdoc-toc gdoc-toc__level--6">
- <nav id="TableOfContents">
- <ul>
- <li>
- <ul>
- <li><a href="#internationalization-i18n">Internationalization (i18n)</a></li>
- <li><a href="#localization-l10n">Localization (l10n)</a></li>
- </ul>
- </li>
- </ul>
- </nav>
- <hr />
- </div>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="internationalization-i18n"
- >
- Internationalization (i18n)
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/i18n-i10n/#internationalization-i18n" class="gdoc-page__anchor clip flex align-center" title=" Internationalization (i18n)" aria-label=" Internationalization (i18n)" href="#internationalization-i18n">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <p>Для форматирования вывода информации в национальном формате (например, чисел) используются следующие пакеты:</p>
- <ul>
- <li><a href="https://pkg.go.dev/golang.org/x/text/language" target="_blank" >golang.org/x/text/language<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a></li>
- <li><a href="https://pkg.go.dev/golang.org/x/text/message" target="_blank" >golang.org/x/text/message<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a></li>
- </ul>
- <p>По-умолчанию, они не установлены. Необходимо их скачать:</p>
- <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">go get -u golang.org/x/text/language
- </span></span><span class="line"><span class="cl">go get -u golang.org/x/text/message
- </span></span></code></pre></div><p>Для вывода информации на основании языка используется тип <code>message.Printer</code>.
- Используется он следующий образом:</p></description></item><item><title>Форматирование даты/времени</title><link>https://maxtar.github.io/programming/go/time-formatting/</link><pubDate>Sun, 02 Oct 2022 14:06:07 +0300</pubDate><guid>https://maxtar.github.io/programming/go/time-formatting/</guid><description><div class="gdoc-toc gdoc-toc__level--6">
- <nav id="TableOfContents">
- <ul>
- <li>
- <ul>
- <li><a href="#простейший-пример">Простейший пример</a></li>
- </ul>
- </li>
- </ul>
- </nav>
- <hr />
- </div>
- <p>Информация взята <a href="http://yourbasic.org/golang/format-parse-string-time-date-example" target="_blank" >Format/parse a time or date<svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg></a></p>
- <div class="flex align-center gdoc-page__anchorwrap">
- <h2 id="простейший-пример"
- >
- Простейший пример
- </h2>
- <a data-clipboard-text="https://maxtar.github.io/programming/go/time-formatting/#простейший-пример" class="gdoc-page__anchor clip flex align-center" title=" Простейший пример" aria-label=" Простейший пример" href="#%d0%bf%d1%80%d0%be%d1%81%d1%82%d0%b5%d0%b9%d1%88%d0%b8%d0%b9-%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80">
- <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
- </a>
- </div>
- <p>Go, в отличие от других языков, использует свою нотацию для времени не <code>yyyy-MM-dd</code>. Go использует мнемоническую нотацию:</p>
- <p><code>Mon Jan 2 15:04:05 MST 2006</code>.</p>
- <p>Её надо переписать в виде, котором надо. Проще всего это запомнить, если переписать её как <code>01/02 03:04:05PM ‘06 -0700</code>.</p></description></item></channel></rss>
|