index.xml 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. <?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>&lt;p>Различные программы, написанные на Go.&lt;/p>
  2. &lt;div class="gdoc-toc gdoc-toc__level--6">
  3. &lt;nav id="TableOfContents">
  4. &lt;ul>
  5. &lt;li>
  6. &lt;ul>
  7. &lt;li>&lt;a href="#разное">Разное&lt;/a>&lt;/li>
  8. &lt;li>&lt;a href="#консольные-приложения">Консольные приложения&lt;/a>&lt;/li>
  9. &lt;li>&lt;a href="#работа-с-файлами">Работа с файлами&lt;/a>&lt;/li>
  10. &lt;li>&lt;a href="#хранение-и-версионирование-кода">Хранение и версионирование кода&lt;/a>&lt;/li>
  11. &lt;li>&lt;a href="#нагрузочное-тестирование">Нагрузочное тестирование&lt;/a>&lt;/li>
  12. &lt;li>&lt;a href="#web">WEB&lt;/a>
  13. &lt;ul>
  14. &lt;li>&lt;a href="#web-приложения">Web-приложения&lt;/a>&lt;/li>
  15. &lt;/ul>
  16. &lt;/li>
  17. &lt;li>&lt;a href="#рисование-графиков">Рисование графиков&lt;/a>&lt;/li>
  18. &lt;li>&lt;a href="#обработка-и-трансформация-данных">Обработка и трансформация данных&lt;/a>&lt;/li>
  19. &lt;li>&lt;a href="#сеть">Сеть&lt;/a>&lt;/li>
  20. &lt;li>&lt;a href="#мониторинг">Мониторинг&lt;/a>&lt;/li>
  21. &lt;li>&lt;a href="#служебные">Служебные&lt;/a>&lt;/li>
  22. &lt;li>&lt;a href="#работа-с-графикой">Работа с графикой&lt;/a>&lt;/li>
  23. &lt;li>&lt;a href="#работа-с-json">Работа с JSON&lt;/a>&lt;/li>
  24. &lt;li>&lt;a href="#работа-с-картами-координатами-и-тд">Работа с картами, координатами и т.д.&lt;/a>&lt;/li>
  25. &lt;li>&lt;a href="#общение">Общение&lt;/a>&lt;/li>
  26. &lt;li>&lt;a href="#соцсети-fediverse">Соцсети, fediverse&lt;/a>&lt;/li>
  27. &lt;li>&lt;a href="#безопасность">Безопасность&lt;/a>&lt;/li>
  28. &lt;li>&lt;a href="#базы-данных-и-прочее">Базы данных и прочее&lt;/a>&lt;/li>
  29. &lt;/ul>
  30. &lt;/li>
  31. &lt;/ul>
  32. &lt;/nav>
  33. &lt;hr />
  34. &lt;/div>
  35. &lt;div class="flex align-center gdoc-page__anchorwrap">
  36. &lt;h2 id="разное"
  37. >
  38. Разное
  39. &lt;/h2>
  40. &lt;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">
  41. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  42. &lt;/a>
  43. &lt;/div>
  44. &lt;ul>
  45. &lt;li>&lt;a href="https://echo.labstack.com" target="_blank" >Простой Web Framework Echo&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>&lt;/li>
  46. &lt;li>&lt;a href="https://github.com/peterhellberg/wiki" target="_blank" >Лёгкая wiki&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  47. &lt;li>&lt;a href="https://ketchuphq.com" target="_blank" >Ketchup CMS&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>, &lt;a href="https://github.com/ketchuphq/ketchup" target="_blank" >github&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  48. &lt;li>&lt;a href="https://github.com/42wim/matterbridge" target="_blank" >matterbridge&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. Мост для объединения различных средств общения (slack, tegeram, mattermost и т.д.).&lt;/li>
  49. &lt;li>&lt;a href="https://github.com/George3d6/Hermes" target="_blank" >Hermes&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - сервер для обмена файлами.&lt;/li>
  50. &lt;li>&lt;a href="https://github.com/schollz/croc" target="_blank" >Croc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - клиент-сервер для посылки файлов.&lt;/li>
  51. &lt;li>Go из Shell &lt;a href="https://neugram.io/" target="_blank" >neugram&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  52. &lt;li>Различные утилиты для проверки сетей (сканеры, парсеры сертификатов и т.д.) &lt;a href="https://zmap.io/" target="_blank" >Zmap&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> &lt;a href="https://github.com/zmap" target="_blank" >Github&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>&lt;/li>
  53. &lt;li>Вывод дерева зависимостей &lt;a href="https://github.com/KyleBanks/depth" target="_blank" >depth&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://kylewbanks.com/blog/visualize-golang-dependency-trees-with-depth" target="_blank" >Блог&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.
  54. &lt;ul>
  55. &lt;li>В графическом виде &lt;a href="https://github.com/TrueFurby/go-callvis" target="_blank" >go-callvis&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  56. &lt;/ul>
  57. &lt;/li>
  58. &lt;li>&lt;a href="https://github.com/claudiodangelis/qrcp" target="_blank" >qrcp&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - передача файлов с компа на мобилку, например, по QRCode.&lt;/li>
  59. &lt;li>&lt;a href="https://magefile.org" target="_blank" >mage&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - замена make на Go. Исходники на &lt;a href="https://github.com/magefile/mage" target="_blank" >GitHub&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  60. &lt;/ul>
  61. &lt;div class="flex align-center gdoc-page__anchorwrap">
  62. &lt;h2 id="консольные-приложения"
  63. >
  64. Консольные приложения
  65. &lt;/h2>
  66. &lt;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">
  67. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  68. &lt;/a>
  69. &lt;/div>
  70. &lt;ul>
  71. &lt;li>&lt;a href="https://github.com/schachmat/wego" target="_blank" >wego&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - показ погоды в консоли.&lt;/li>
  72. &lt;/ul>
  73. &lt;div class="flex align-center gdoc-page__anchorwrap">
  74. &lt;h2 id="работа-с-файлами"
  75. >
  76. Работа с файлами
  77. &lt;/h2>
  78. &lt;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">
  79. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  80. &lt;/a>
  81. &lt;/div>
  82. &lt;ul>
  83. &lt;li>&lt;a href="https://github.com/viktomas/godu" target="_blank" >godu&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - позволяет быстро просматривать каталоги с большим количеством файлов.&lt;/li>
  84. &lt;li>&lt;a href="https://github.com/gokcehan/lf" target="_blank" >lf&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - консольный менеджер файлов на Go.&lt;/li>
  85. &lt;li>&lt;a href="https://github.com/eltaline/wzd" target="_blank" >wzd&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - веб-сервер для работы с огромным количеством файлов.&lt;/li>
  86. &lt;li>&lt;a href="https://github.com/muesli/duf" target="_blank" >duf&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - отображение информации про диски. Работает только под Unix.&lt;/li>
  87. &lt;li>&lt;a href="https://github.com/kashav/fsql" target="_blank" >fsql&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - поиск файлов в виде SQL.&lt;/li>
  88. &lt;/ul>
  89. &lt;div class="flex align-center gdoc-page__anchorwrap">
  90. &lt;h2 id="хранение-и-версионирование-кода"
  91. >
  92. Хранение и версионирование кода
  93. &lt;/h2>
  94. &lt;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">
  95. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  96. &lt;/a>
  97. &lt;/div>
  98. &lt;ul>
  99. &lt;li>Система хранения и версионирования кода - &lt;a href="https://gogs.io/" target="_blank" >Gogs&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://github.com/gogits/gogs" target="_blank" >Github&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  100. &lt;li>&lt;a href="https://gitea.io" target="_blank" >Gitea&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - склонированная и расширенная версия Gogs. Разворачивается локально. Исходники на &lt;a href="https://github.com/go-gitea/gitea" target="_blank" >GitHub&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  101. &lt;li>&lt;a href="https://github.com/jesseduffield/lazygit" target="_blank" >Lazygit (https://github.com/jesseduffield/lazygit)&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. Консольный клиент для работы с git.&lt;/li>
  102. &lt;li>&lt;a href="https://gitness.com" target="_blank" >Gitness&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - opensource проект. Разворачивается локально. &lt;a href="https://github.com/harness/gitness" target="_blank" >GitHub&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  103. &lt;/ul>
  104. &lt;div class="flex align-center gdoc-page__anchorwrap">
  105. &lt;h2 id="нагрузочное-тестирование"
  106. >
  107. Нагрузочное тестирование
  108. &lt;/h2>
  109. &lt;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">
  110. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  111. &lt;/a>
  112. &lt;/div>
  113. &lt;ul>
  114. &lt;li>&lt;a href="https://github.com/loadimpact/k6" target="_blank" >K6&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://docs.k6.io/docs/running-k6" target="_blank" >Документация&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  115. &lt;li>&lt;a href="https://github.com/tsenart/vegeta" target="_blank" >vegeta (https://github.com/tsenart/vegeta)&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - подключается, либо как библиотека, либо используется из командной строки.&lt;/li>
  116. &lt;/ul>
  117. &lt;div class="flex align-center gdoc-page__anchorwrap">
  118. &lt;h2 id="web"
  119. >
  120. WEB
  121. &lt;/h2>
  122. &lt;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">
  123. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  124. &lt;/a>
  125. &lt;/div>
  126. &lt;ul>
  127. &lt;li>&lt;a href="https://caddyserver.com" target="_blank" >Caddy&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - лёгкий и быстрый http-сервер как Nginx или Apache. &lt;a href="https://caddyserver.com" target="_blank" >Документация&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. Исходники на &lt;a href="https://github.com/caddyserver/caddy" target="_blank" >github&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  128. &lt;li>&lt;a href="https://github.com/fatedier/frp" target="_blank" >FRP&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - reverse-proxy.&lt;/li>
  129. &lt;li>&lt;a href="https://github.com/casbin/casbin-forum" target="_blank" >Casbin forum&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - реализация форума на Go и ReactJS.&lt;/li>
  130. &lt;li>&lt;a href="https://github.com/drakkan/sftpgo" target="_blank" >sftpgo&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - сервер, поддерживающий различные протоколы: SFTP, HTTP, FTP/S and WebDAV. И также различные системы хранения: local filesystem, encrypted local filesystem, S3 (compatible) Object Storage, Google Cloud Storage, Azure Blob Storage.&lt;/li>
  131. &lt;/ul>
  132. &lt;div class="flex align-center gdoc-page__anchorwrap">
  133. &lt;h3 id="web-приложения"
  134. >
  135. Web-приложения
  136. &lt;/h3>
  137. &lt;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-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f">
  138. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  139. &lt;/a>
  140. &lt;/div>
  141. &lt;ul>
  142. &lt;li>&lt;a href="https://github.com/wasmvision/wasmvision" target="_blank" >wasmVision&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - wasm-приложения, использующее openCv для работы с камерой. Накладывает эффекты, типа размытия.&lt;/li>
  143. &lt;/ul>
  144. &lt;div class="flex align-center gdoc-page__anchorwrap">
  145. &lt;h2 id="рисование-графиков"
  146. >
  147. Рисование графиков
  148. &lt;/h2>
  149. &lt;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">
  150. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  151. &lt;/a>
  152. &lt;/div>
  153. &lt;p>&lt;a href="https://github.com/marianogappa/chart" target="_blank" >Chart&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - рисует график на основании данных из стандартного потока ввода. &lt;a href="https://marianogappa.github.io/chart" target="_blank" >Примеры отображения&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://movio.co/blog/improving-with-sql-and-charts" target="_blank" >Статья об использовании&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/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>&lt;div class="gdoc-toc gdoc-toc__level--6">
  154. &lt;nav id="TableOfContents">
  155. &lt;ul>
  156. &lt;li>
  157. &lt;ul>
  158. &lt;li>&lt;a href="#перехват-ctrlc">Перехват Ctrl+C&lt;/a>
  159. &lt;ul>
  160. &lt;li>&lt;a href="#более-простой-вариант">Более простой вариант&lt;/a>&lt;/li>
  161. &lt;/ul>
  162. &lt;/li>
  163. &lt;li>&lt;a href="#как-правильно-реализовать-singletone">Как правильно реализовать Singletone&lt;/a>&lt;/li>
  164. &lt;li>&lt;a href="#ожидание-нажатия-enter-в-консоли">Ожидание нажатия Enter в консоли&lt;/a>&lt;/li>
  165. &lt;li>&lt;a href="#логирование-из-тестов">Логирование из тестов&lt;/a>&lt;/li>
  166. &lt;li>&lt;a href="#создание-собственного-типа-аргумента-командной-строки">Создание собственного типа аргумента командной строки&lt;/a>&lt;/li>
  167. &lt;li>&lt;a href="#удаление-элемента-из-slice">Удаление элемента из slice&lt;/a>&lt;/li>
  168. &lt;li>&lt;a href="#подключение-к-microsoft-iis-по-ssl">Подключение к Microsoft IIS по SSL&lt;/a>&lt;/li>
  169. &lt;li>&lt;a href="#вычисление-абсолютного-значения-целых-чисел">Вычисление абсолютного значения целых чисел&lt;/a>&lt;/li>
  170. &lt;/ul>
  171. &lt;/li>
  172. &lt;/ul>
  173. &lt;/nav>
  174. &lt;hr />
  175. &lt;/div>
  176. &lt;div class="flex align-center gdoc-page__anchorwrap">
  177. &lt;h2 id="перехват-ctrlc"
  178. >
  179. Перехват Ctrl+C
  180. &lt;/h2>
  181. &lt;a data-clipboard-text="https://maxtar.github.io/programming/go/useful-func/#перехват-ctrlc" class="gdoc-page__anchor clip flex align-center" title=" Перехват Ctrl&amp;#43;C" aria-label=" Перехват Ctrl&amp;#43;C" href="#%d0%bf%d0%b5%d1%80%d0%b5%d1%85%d0%b2%d0%b0%d1%82-ctrlc">
  182. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  183. &lt;/a>
  184. &lt;/div>
  185. &lt;p>Информация взята из блога &lt;a href="https://medium.com/@matryer/make-ctrl-c-cancel-the-context-context-bd006a8ad6ff" target="_blank" >Mat Ryer&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/p>
  186. &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">func&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
  187. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">ctx&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">context&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Background&lt;/span>&lt;span class="p">()&lt;/span>
  188. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
  189. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// trap Ctrl#C and call cancel on the context
  190. &lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">ctx&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">cancel&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nx">context&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">WithCancel&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">ctx&lt;/span>&lt;span class="p">)&lt;/span>
  191. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">c&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nb">make&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kd">chan&lt;/span> &lt;span class="nx">os&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Signal&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
  192. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">signal&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Notify&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">c&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">os&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Interrupt&lt;/span>&lt;span class="p">)&lt;/span>
  193. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">defer&lt;/span> &lt;span class="kd">func&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
  194. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">signal&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Stop&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">c&lt;/span>&lt;span class="p">)&lt;/span>
  195. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">cancel&lt;/span>&lt;span class="p">()&lt;/span>
  196. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}()&lt;/span>
  197. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">go&lt;/span> &lt;span class="kd">func&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
  198. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">select&lt;/span> &lt;span class="p">{&lt;/span>
  199. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span>&lt;span class="nx">c&lt;/span>&lt;span class="p">:&lt;/span>
  200. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">cancel&lt;/span>&lt;span class="p">()&lt;/span>
  201. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span>&lt;span class="nx">ctx&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Done&lt;/span>&lt;span class="p">():&lt;/span>
  202. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
  203. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}()&lt;/span>
  204. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
  205. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nf">doSomethingAwesome&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">ctx&lt;/span>&lt;span class="p">)&lt;/span>
  206. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
  207. &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="flex align-center gdoc-page__anchorwrap">
  208. &lt;h3 id="более-простой-вариант"
  209. >
  210. Более простой вариант
  211. &lt;/h3>
  212. &lt;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">
  213. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  214. &lt;/a>
  215. &lt;/div>
  216. &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-go" data-lang="go">&lt;span class="line">&lt;span class="cl">&lt;span class="kd">func&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
  217. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">c&lt;/span> &lt;span class="o">:=&lt;/span> &lt;span class="nb">make&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kd">chan&lt;/span> &lt;span class="nx">os&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Signal&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
  218. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">signal&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nf">Notify&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">c&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">os&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">Interrupt&lt;/span>&lt;span class="p">)&lt;/span>
  219. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Wait for Ctrl#C
  220. &lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span>&lt;span class="nx">c&lt;/span>
  221. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
  222. &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
  223. &lt;div class="flex align-center gdoc-page__anchorwrap">
  224. &lt;h2 id="как-правильно-реализовать-singletone"
  225. >
  226. Как правильно реализовать Singletone
  227. &lt;/h2>
  228. &lt;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">
  229. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  230. &lt;/a>
  231. &lt;/div>
  232. &lt;p>Вариант взят отсюда &lt;a href="http://marcio.io/2015/07/singleton-pattern-in-go/" target="_blank" >singleton-pattern-in-go&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/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>&lt;div class="gdoc-toc gdoc-toc__level--6">
  233. &lt;nav id="TableOfContents">
  234. &lt;ul>
  235. &lt;li>
  236. &lt;ul>
  237. &lt;li>&lt;a href="#конфигурация-и-всё-такое">Конфигурация и всё такое&lt;/a>&lt;/li>
  238. &lt;li>&lt;a href="#логгирование">Логгирование&lt;/a>&lt;/li>
  239. &lt;li>&lt;a href="#ui">UI&lt;/a>
  240. &lt;ul>
  241. &lt;li>&lt;a href="#пользовательский-интерфейс-в-терминале">Пользовательский интерфейс в терминале&lt;/a>&lt;/li>
  242. &lt;li>&lt;a href="#gui">GUI&lt;/a>&lt;/li>
  243. &lt;/ul>
  244. &lt;/li>
  245. &lt;li>&lt;a href="#консоль">Консоль&lt;/a>&lt;/li>
  246. &lt;li>&lt;a href="#работа-с-бд">Работа с БД&lt;/a>&lt;/li>
  247. &lt;li>&lt;a href="#работа-с-json-xml">Работа с json, XML&lt;/a>&lt;/li>
  248. &lt;li>&lt;a href="#html-парсинг-сайтов">HTML, парсинг сайтов&lt;/a>&lt;/li>
  249. &lt;li>&lt;a href="#работа-с-файлами">Работа с файлами&lt;/a>&lt;/li>
  250. &lt;li>&lt;a href="#тестирование">Тестирование&lt;/a>
  251. &lt;ul>
  252. &lt;li>&lt;a href="#генерация-данных">Генерация данных&lt;/a>&lt;/li>
  253. &lt;/ul>
  254. &lt;/li>
  255. &lt;li>&lt;a href="#шаблоны">Шаблоны&lt;/a>&lt;/li>
  256. &lt;li>&lt;a href="#http">HTTP&lt;/a>&lt;/li>
  257. &lt;li>&lt;a href="#web-приложения">WEB-приложения&lt;/a>&lt;/li>
  258. &lt;li>&lt;a href="#openapi">OpenAPI&lt;/a>&lt;/li>
  259. &lt;li>&lt;a href="#работа-с-сетью">Работа с сетью&lt;/a>&lt;/li>
  260. &lt;li>&lt;a href="#работа-со-строками">Работа со строками&lt;/a>&lt;/li>
  261. &lt;li>&lt;a href="#работа-со-временем">Работа со временем&lt;/a>&lt;/li>
  262. &lt;li>&lt;a href="#генерация-различных-id">Генерация различных ID&lt;/a>&lt;/li>
  263. &lt;li>&lt;a href="#работа-с-hardware">Работа с hardware&lt;/a>&lt;/li>
  264. &lt;li>&lt;a href="#сетевые-framework">Сетевые framework&lt;/a>&lt;/li>
  265. &lt;li>&lt;a href="#списки-и-наборы">Списки и наборы&lt;/a>&lt;/li>
  266. &lt;li>&lt;a href="#игры">Игры&lt;/a>&lt;/li>
  267. &lt;li>&lt;a href="#графика">Графика&lt;/a>&lt;/li>
  268. &lt;li>&lt;a href="#видео">Видео&lt;/a>&lt;/li>
  269. &lt;li>&lt;a href="#статистика-и-математика">Статистика и математика&lt;/a>&lt;/li>
  270. &lt;li>&lt;a href="#обработка-данных-на-потоке-и-прочее">Обработка данных на потоке и прочее&lt;/a>&lt;/li>
  271. &lt;li>&lt;a href="#парсеры">Парсеры&lt;/a>&lt;/li>
  272. &lt;li>&lt;a href="#коллекции">Коллекции&lt;/a>&lt;/li>
  273. &lt;li>&lt;a href="#встраивание-ресурсов-теперь-не-актуально-так-как-с-версии-16-есть-встроенный-механизм">Встраивание ресурсов (теперь не актуально, так как с версии 1.6 есть встроенный механизм)&lt;/a>&lt;/li>
  274. &lt;li>&lt;a href="#вспомогательные-утилиты">Вспомогательные утилиты&lt;/a>&lt;/li>
  275. &lt;li>&lt;a href="#работа-со-звуком">Работа со звуком&lt;/a>&lt;/li>
  276. &lt;li>&lt;a href="#мониторинг">Мониторинг&lt;/a>&lt;/li>
  277. &lt;li>&lt;a href="#opencv">OpenCV&lt;/a>&lt;/li>
  278. &lt;li>&lt;a href="#офис">Офис&lt;/a>&lt;/li>
  279. &lt;li>&lt;a href="#goroutines">goroutines&lt;/a>&lt;/li>
  280. &lt;li>&lt;a href="#шифровние">Шифровние&lt;/a>&lt;/li>
  281. &lt;li>&lt;a href="#события">События&lt;/a>&lt;/li>
  282. &lt;li>&lt;a href="#интеграция-с-другими-яп">Интеграция с другими ЯП&lt;/a>&lt;/li>
  283. &lt;li>&lt;a href="#разное">Разное&lt;/a>&lt;/li>
  284. &lt;/ul>
  285. &lt;/li>
  286. &lt;/ul>
  287. &lt;/nav>
  288. &lt;hr />
  289. &lt;/div>
  290. &lt;div class="flex align-center gdoc-page__anchorwrap">
  291. &lt;h2 id="конфигурация-и-всё-такое"
  292. >
  293. Конфигурация и всё такое
  294. &lt;/h2>
  295. &lt;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">
  296. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  297. &lt;/a>
  298. &lt;/div>
  299. &lt;ul>
  300. &lt;li>&lt;a href="https://github.com/spf13/viper" target="_blank" >viper&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> Чтение и сохранение конфигурации в различных форматах.&lt;/li>
  301. &lt;li>&lt;a href="https://github.com/spf13/cobra" target="_blank" >Работа с командной строкой: создание флагов командной строки в POSIX формате, автоматическая генерация &amp;ldquo;как использовать&amp;rdquo;&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  302. &lt;li>&lt;a href="https://github.com/alecthomas/kingpin" target="_blank" >Kingpin&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - ещё одна реализация работы с флагами. &lt;a href="https://godoc.org/github.com/alecthomas/kingpin" target="_blank" >Godoc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  303. &lt;li>&lt;a href="https://github.com/integrii/flaggy" target="_blank" >Flaggy&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. Также работа с командной, возможность создания подкоманд. &lt;a href="https://godoc.org/github.com/integrii/flaggy" target="_blank" >Godoc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  304. &lt;li>&lt;a href="https://github.com/micro/go-config" target="_blank" >Go-Config&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. Позволяет собирать конфигурацию из различных источников (файлы, командная строка и т.д.). &lt;a href="https://godoc.org/github.com/micro/go-config" target="_blank" >Godoc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://micro.mu/blog/2018/07/04/go-config.html" target="_blank" >Описание в блоге&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  305. &lt;li>&lt;a href="https://github.com/tkanos/gonfig" target="_blank" >Gonfig&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - позволяет читать конфигурацию из json и переменных окружения.&lt;/li>
  306. &lt;li>&lt;a href="https://github.com/moogar0880/venom" target="_blank" >Venom&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. Также позволяет конфигурировать из различных источников. &lt;a href="https://godoc.org/github.com/moogar0880/venom" target="_blank" >GoDoc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  307. &lt;li>Реализация формата &lt;a href="https://github.com/lightbend/config/blob/master/HOCON.md" target="_blank" >HOCON&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> &lt;a href="https://github.com/go-akka/configuration" target="_blank" >configuration&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://godoc.org/github.com/go-akka/configuration" target="_blank" >GoDoc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  308. &lt;li>&lt;a href="https://github.com/go-yaml/yaml" target="_blank" >Yaml&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - работа с YAML от &lt;a href="https://www.canonical.com/" target="_blank" >Canonical&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://gopkg.in/yaml.v3" target="_blank" >API&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://blog.ubuntu.com/2019/04/05/api-v3-of-the-yaml-package-for-go-is-available" target="_blank" >Blog&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  309. &lt;li>&lt;a href="https://github.com/manifoldco/promptui" target="_blank" >promptui&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - позволяет запрашивать у пользователя информацию в процессе работает. Интегрируется, например с &lt;a href="https://github.com/spf13/cobra" target="_blank" >cobra&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> и другими подобными библиотеками. &lt;a href="https://pkg.go.dev/github.com/manifoldco/promptui?tab=doc" target="_blank" >GoDoc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  310. &lt;li>&lt;a href="https://github.com/urfave/cli" target="_blank" >cli&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - ещё одна библиотека для расширения флагов командной строки. &lt;a href="https://pkg.go.dev/github.com/urfave/cli?tab=doc" target="_blank" >GoDoc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  311. &lt;li>&lt;a href="https://github.com/knadh/koanf" target="_blank" >koanf&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - позиционируется как более легковесный конкурент &lt;a href="https://github.com/spf13/viper" target="_blank" >viper&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  312. &lt;/ul>
  313. &lt;hr>
  314. &lt;div class="flex align-center gdoc-page__anchorwrap">
  315. &lt;h2 id="логгирование"
  316. >
  317. Логгирование
  318. &lt;/h2>
  319. &lt;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">
  320. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  321. &lt;/a>
  322. &lt;/div>
  323. &lt;ul>
  324. &lt;li>Библиотека от Google &lt;a href="https://github.com/golang/glog" target="_blank" >Glog&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://godoc.org/github.com/golang/glog" target="_blank" >Документация&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  325. &lt;li>Библиотека от juju &lt;a href="https://github.com/juju/loggo" target="_blank" >Loggo&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://godoc.org/github.com/juju/loggo" target="_blank" >Документация&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  326. &lt;li>Библиотека от Uber &lt;a href="https://github.com/uber-go/zap" target="_blank" >Zap&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://godoc.org/go.uber.org/zap" target="_blank" >Документация&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  327. &lt;li>&lt;a href="https://github.com/sirupsen/logrus" target="_blank" >Logrus&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. Наверное наиболее популярный. Используется в Docker. &lt;a href="https://godoc.org/github.com/sirupsen/logrus" target="_blank" >API&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  328. &lt;li>Вроде как самая маленькая библиотека &lt;a href="https://github.com/op/go-logging" target="_blank" >go-logging&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://godoc.org/github.com/op/go-logging" target="_blank" >API&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  329. &lt;li>&lt;a href="https://github.com/rs/zerolog" target="_blank" >zerolog&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - логирование в формате json. &lt;a href="https://godoc.org/github.com/rs/zerolog" target="_blank" >GoDoc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. Также может логировать в нормальном виде.&lt;/li>
  330. &lt;li>&lt;a href="https://github.com/davecgh/go-spew" target="_blank" >go-spew&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - красивый вывод в консоль данных для отладки. &lt;a href="https://pkg.go.dev/github.com/davecgh/go-spew@v1.1.1/spew?tab=doc" target="_blank" >GoDoc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  331. &lt;li>&lt;a href="https://github.com/henvic/httpretty" target="_blank" >httpretty&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - удобное логирование в консоль http запросов как на сервере, так и на клиенте. &lt;a href="https://pkg.go.dev/github.com/henvic/httpretty?tab=doc" target="_blank" >GoDoc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  332. &lt;li>&lt;a href="https://github.com/m-mizutani/zlog" target="_blank" >zlog&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - логер позволяет скрывать чувствительную информацию из логирования. &lt;a href="https://pkg.go.dev/github.com/m-mizutani/zlog@v0.2.0" target="_blank" >GoDoc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  333. &lt;li>&lt;a href="https://github.com/charmbracelet/log" target="_blank" >Log&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> - простенький логер с подсветкой вывода от создателей &lt;a href="https://github.com/charmbracelet/bubbletea" target="_blank" >Bubble Tea&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>. &lt;a href="https://pkg.go.dev/github.com/charmbracelet/log" target="_blank" >GoDoc&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/li>
  334. &lt;/ul>
  335. &lt;hr>
  336. &lt;div class="flex align-center gdoc-page__anchorwrap">
  337. &lt;h2 id="ui"
  338. >
  339. UI
  340. &lt;/h2>
  341. &lt;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">
  342. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  343. &lt;/a>
  344. &lt;/div>
  345. &lt;div class="flex align-center gdoc-page__anchorwrap">
  346. &lt;h3 id="пользовательский-интерфейс-в-терминале"
  347. >
  348. Пользовательский интерфейс в терминале
  349. &lt;/h3>
  350. &lt;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">
  351. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  352. &lt;/a>
  353. &lt;/div>
  354. &lt;p>&lt;a href="https://appliedgo.net/tui" target="_blank" >Отличная статья&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a> с обзором разных библиотек для написания text-based GUI.&lt;/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>&lt;p>Информация взята &lt;a href="https://phraseapp.com/blog/posts/internationalization-i18n-go" target="_blank" >отсюда&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>&lt;/p>
  355. &lt;p>&lt;a href="https://github.com/nicksnyder/go-i18n" target="_blank" >Альтернативный пакет (https://github.com/nicksnyder/go-i18n)&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>.&lt;/p>
  356. &lt;div class="gdoc-toc gdoc-toc__level--6">
  357. &lt;nav id="TableOfContents">
  358. &lt;ul>
  359. &lt;li>
  360. &lt;ul>
  361. &lt;li>&lt;a href="#internationalization-i18n">Internationalization (i18n)&lt;/a>&lt;/li>
  362. &lt;li>&lt;a href="#localization-l10n">Localization (l10n)&lt;/a>&lt;/li>
  363. &lt;/ul>
  364. &lt;/li>
  365. &lt;/ul>
  366. &lt;/nav>
  367. &lt;hr />
  368. &lt;/div>
  369. &lt;div class="flex align-center gdoc-page__anchorwrap">
  370. &lt;h2 id="internationalization-i18n"
  371. >
  372. Internationalization (i18n)
  373. &lt;/h2>
  374. &lt;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">
  375. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  376. &lt;/a>
  377. &lt;/div>
  378. &lt;p>Для форматирования вывода информации в национальном формате (например, чисел) используются следующие пакеты:&lt;/p>
  379. &lt;ul>
  380. &lt;li>&lt;a href="https://pkg.go.dev/golang.org/x/text/language" target="_blank" >golang.org/x/text/language&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>&lt;/li>
  381. &lt;li>&lt;a href="https://pkg.go.dev/golang.org/x/text/message" target="_blank" >golang.org/x/text/message&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>&lt;/li>
  382. &lt;/ul>
  383. &lt;p>По-умолчанию, они не установлены. Необходимо их скачать:&lt;/p>
  384. &lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">go get -u golang.org/x/text/language
  385. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">go get -u golang.org/x/text/message
  386. &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Для вывода информации на основании языка используется тип &lt;code>message.Printer&lt;/code>.
  387. Используется он следующий образом:&lt;/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>&lt;div class="gdoc-toc gdoc-toc__level--6">
  388. &lt;nav id="TableOfContents">
  389. &lt;ul>
  390. &lt;li>
  391. &lt;ul>
  392. &lt;li>&lt;a href="#простейший-пример">Простейший пример&lt;/a>&lt;/li>
  393. &lt;/ul>
  394. &lt;/li>
  395. &lt;/ul>
  396. &lt;/nav>
  397. &lt;hr />
  398. &lt;/div>
  399. &lt;p>Информация взята &lt;a href="http://yourbasic.org/golang/format-parse-string-time-date-example" target="_blank" >Format/parse a time or date&lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>&lt;/a>&lt;/p>
  400. &lt;div class="flex align-center gdoc-page__anchorwrap">
  401. &lt;h2 id="простейший-пример"
  402. >
  403. Простейший пример
  404. &lt;/h2>
  405. &lt;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">
  406. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  407. &lt;/a>
  408. &lt;/div>
  409. &lt;p>Go, в отличие от других языков, использует свою нотацию для времени не &lt;code>yyyy-MM-dd&lt;/code>. Go использует мнемоническую нотацию:&lt;/p>
  410. &lt;p>&lt;code>Mon Jan 2 15:04:05 MST 2006&lt;/code>.&lt;/p>
  411. &lt;p>Её надо переписать в виде, котором надо. Проще всего это запомнить, если переписать её как &lt;code>01/02 03:04:05PM ‘06 -0700&lt;/code>.&lt;/p></description></item></channel></rss>