index.xml 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  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>&lt;/li>
  13. &lt;li>&lt;a href="#рисование-графиков">Рисование графиков&lt;/a>&lt;/li>
  14. &lt;li>&lt;a href="#обработка-и-трансформация-данных">Обработка и трансформация данных&lt;/a>&lt;/li>
  15. &lt;li>&lt;a href="#сеть">Сеть&lt;/a>&lt;/li>
  16. &lt;li>&lt;a href="#мониторинг">Мониторинг&lt;/a>&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="#работа-с-json">Работа с JSON&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="#соцсети-fediverse">Соцсети, fediverse&lt;/a>&lt;/li>
  23. &lt;li>&lt;a href="#безопасность">Безопасность&lt;/a>&lt;/li>
  24. &lt;li>&lt;a href="#базы-данных-и-прочее">Базы данных и прочее&lt;/a>&lt;/li>
  25. &lt;/ul>
  26. &lt;/li>
  27. &lt;/ul>
  28. &lt;/nav>
  29. &lt;hr />
  30. &lt;/div>
  31. &lt;div class="flex align-center gdoc-page__anchorwrap">
  32. &lt;h2 id="разное"
  33. >
  34. Разное
  35. &lt;/h2>
  36. &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">
  37. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  38. &lt;/a>
  39. &lt;/div>
  40. &lt;ul>
  41. &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>
  42. &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>
  43. &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>
  44. &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>
  45. &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>
  46. &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>
  47. &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>
  48. &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>
  49. &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>.
  50. &lt;ul>
  51. &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>
  52. &lt;/ul>
  53. &lt;/li>
  54. &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>
  55. &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>
  56. &lt;/ul>
  57. &lt;div class="flex align-center gdoc-page__anchorwrap">
  58. &lt;h2 id="консольные-приложения"
  59. >
  60. Консольные приложения
  61. &lt;/h2>
  62. &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">
  63. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  64. &lt;/a>
  65. &lt;/div>
  66. &lt;ul>
  67. &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>
  68. &lt;/ul>
  69. &lt;div class="flex align-center gdoc-page__anchorwrap">
  70. &lt;h2 id="работа-с-файлами"
  71. >
  72. Работа с файлами
  73. &lt;/h2>
  74. &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">
  75. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  76. &lt;/a>
  77. &lt;/div>
  78. &lt;ul>
  79. &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>
  80. &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>
  81. &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>
  82. &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>
  83. &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>
  84. &lt;/ul>
  85. &lt;div class="flex align-center gdoc-page__anchorwrap">
  86. &lt;h2 id="хранение-и-версионирование-кода"
  87. >
  88. Хранение и версионирование кода
  89. &lt;/h2>
  90. &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">
  91. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  92. &lt;/a>
  93. &lt;/div>
  94. &lt;ul>
  95. &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>
  96. &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>
  97. &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>
  98. &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>
  99. &lt;/ul>
  100. &lt;div class="flex align-center gdoc-page__anchorwrap">
  101. &lt;h2 id="нагрузочное-тестирование"
  102. >
  103. Нагрузочное тестирование
  104. &lt;/h2>
  105. &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">
  106. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  107. &lt;/a>
  108. &lt;/div>
  109. &lt;ul>
  110. &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>
  111. &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>
  112. &lt;/ul>
  113. &lt;div class="flex align-center gdoc-page__anchorwrap">
  114. &lt;h2 id="web"
  115. >
  116. WEB
  117. &lt;/h2>
  118. &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">
  119. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  120. &lt;/a>
  121. &lt;/div>
  122. &lt;ul>
  123. &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>
  124. &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>
  125. &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>
  126. &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>
  127. &lt;/ul>
  128. &lt;div class="flex align-center gdoc-page__anchorwrap">
  129. &lt;h2 id="рисование-графиков"
  130. >
  131. Рисование графиков
  132. &lt;/h2>
  133. &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">
  134. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  135. &lt;/a>
  136. &lt;/div>
  137. &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">
  138. &lt;nav id="TableOfContents">
  139. &lt;ul>
  140. &lt;li>
  141. &lt;ul>
  142. &lt;li>&lt;a href="#перехват-ctrlc">Перехват Ctrl+C&lt;/a>
  143. &lt;ul>
  144. &lt;li>&lt;a href="#более-простой-вариант">Более простой вариант&lt;/a>&lt;/li>
  145. &lt;/ul>
  146. &lt;/li>
  147. &lt;li>&lt;a href="#как-правильно-реализовать-singletone">Как правильно реализовать Singletone&lt;/a>&lt;/li>
  148. &lt;li>&lt;a href="#ожидание-нажатия-enter-в-консоли">Ожидание нажатия Enter в консоли&lt;/a>&lt;/li>
  149. &lt;li>&lt;a href="#логирование-из-тестов">Логирование из тестов&lt;/a>&lt;/li>
  150. &lt;li>&lt;a href="#создание-собственного-типа-аргумента-командной-строки">Создание собственного типа аргумента командной строки&lt;/a>&lt;/li>
  151. &lt;li>&lt;a href="#удаление-элемента-из-slice">Удаление элемента из slice&lt;/a>&lt;/li>
  152. &lt;li>&lt;a href="#подключение-к-microsoft-iis-по-ssl">Подключение к Microsoft IIS по SSL&lt;/a>&lt;/li>
  153. &lt;li>&lt;a href="#вычисление-абсолютного-значения-целых-чисел">Вычисление абсолютного значения целых чисел&lt;/a>&lt;/li>
  154. &lt;/ul>
  155. &lt;/li>
  156. &lt;/ul>
  157. &lt;/nav>
  158. &lt;hr />
  159. &lt;/div>
  160. &lt;div class="flex align-center gdoc-page__anchorwrap">
  161. &lt;h2 id="перехват-ctrlc"
  162. >
  163. Перехват Ctrl+C
  164. &lt;/h2>
  165. &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">
  166. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  167. &lt;/a>
  168. &lt;/div>
  169. &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>
  170. &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>
  171. &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>
  172. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
  173. &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
  174. &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>
  175. &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>
  176. &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>
  177. &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>
  178. &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>
  179. &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>
  180. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}()&lt;/span>
  181. &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>
  182. &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>
  183. &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>
  184. &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>
  185. &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>
  186. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
  187. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &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="nf">doSomethingAwesome&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">ctx&lt;/span>&lt;span class="p">)&lt;/span>
  190. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
  191. &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="flex align-center gdoc-page__anchorwrap">
  192. &lt;h3 id="более-простой-вариант"
  193. >
  194. Более простой вариант
  195. &lt;/h3>
  196. &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">
  197. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  198. &lt;/a>
  199. &lt;/div>
  200. &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>
  201. &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>
  202. &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>
  203. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Wait for Ctrl#C
  204. &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>
  205. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
  206. &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
  207. &lt;div class="flex align-center gdoc-page__anchorwrap">
  208. &lt;h2 id="как-правильно-реализовать-singletone"
  209. >
  210. Как правильно реализовать Singletone
  211. &lt;/h2>
  212. &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">
  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;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">
  217. &lt;nav id="TableOfContents">
  218. &lt;ul>
  219. &lt;li>
  220. &lt;ul>
  221. &lt;li>&lt;a href="#конфигурация-и-всё-такое">Конфигурация и всё такое&lt;/a>&lt;/li>
  222. &lt;li>&lt;a href="#логгирование">Логгирование&lt;/a>&lt;/li>
  223. &lt;li>&lt;a href="#ui">UI&lt;/a>
  224. &lt;ul>
  225. &lt;li>&lt;a href="#пользовательский-интерфейс-в-терминале">Пользовательский интерфейс в терминале&lt;/a>&lt;/li>
  226. &lt;li>&lt;a href="#gui">GUI&lt;/a>&lt;/li>
  227. &lt;/ul>
  228. &lt;/li>
  229. &lt;li>&lt;a href="#консоль">Консоль&lt;/a>&lt;/li>
  230. &lt;li>&lt;a href="#работа-с-бд">Работа с БД&lt;/a>&lt;/li>
  231. &lt;li>&lt;a href="#работа-с-json-xml">Работа с json, XML&lt;/a>&lt;/li>
  232. &lt;li>&lt;a href="#html-парсинг-сайтов">HTML, парсинг сайтов&lt;/a>&lt;/li>
  233. &lt;li>&lt;a href="#работа-с-файлами">Работа с файлами&lt;/a>&lt;/li>
  234. &lt;li>&lt;a href="#тестирование">Тестирование&lt;/a>
  235. &lt;ul>
  236. &lt;li>&lt;a href="#генерация-данных">Генерация данных&lt;/a>&lt;/li>
  237. &lt;/ul>
  238. &lt;/li>
  239. &lt;li>&lt;a href="#шаблоны">Шаблоны&lt;/a>&lt;/li>
  240. &lt;li>&lt;a href="#http">HTTP&lt;/a>&lt;/li>
  241. &lt;li>&lt;a href="#web-приложения">WEB-приложения&lt;/a>&lt;/li>
  242. &lt;li>&lt;a href="#openapi">OpenAPI&lt;/a>&lt;/li>
  243. &lt;li>&lt;a href="#работа-с-сетью">Работа с сетью&lt;/a>&lt;/li>
  244. &lt;li>&lt;a href="#работа-со-строками">Работа со строками&lt;/a>&lt;/li>
  245. &lt;li>&lt;a href="#работа-со-временем">Работа со временем&lt;/a>&lt;/li>
  246. &lt;li>&lt;a href="#генерация-различных-id">Генерация различных ID&lt;/a>&lt;/li>
  247. &lt;li>&lt;a href="#работа-с-hardware">Работа с hardware&lt;/a>&lt;/li>
  248. &lt;li>&lt;a href="#сетевые-framework">Сетевые framework&lt;/a>&lt;/li>
  249. &lt;li>&lt;a href="#списки-и-наборы">Списки и наборы&lt;/a>&lt;/li>
  250. &lt;li>&lt;a href="#игры">Игры&lt;/a>&lt;/li>
  251. &lt;li>&lt;a href="#графика">Графика&lt;/a>&lt;/li>
  252. &lt;li>&lt;a href="#видео">Видео&lt;/a>&lt;/li>
  253. &lt;li>&lt;a href="#статистика-и-математика">Статистика и математика&lt;/a>&lt;/li>
  254. &lt;li>&lt;a href="#обработка-данных-на-потоке-и-прочее">Обработка данных на потоке и прочее&lt;/a>&lt;/li>
  255. &lt;li>&lt;a href="#парсеры">Парсеры&lt;/a>&lt;/li>
  256. &lt;li>&lt;a href="#коллекции">Коллекции&lt;/a>&lt;/li>
  257. &lt;li>&lt;a href="#встраивание-ресурсов-теперь-не-актуально-так-как-с-версии-16-есть-встроенный-механизм">Встраивание ресурсов (теперь не актуально, так как с версии 1.6 есть встроенный механизм)&lt;/a>&lt;/li>
  258. &lt;li>&lt;a href="#вспомогательные-утилиты">Вспомогательные утилиты&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="#opencv">OpenCV&lt;/a>&lt;/li>
  262. &lt;li>&lt;a href="#офис">Офис&lt;/a>&lt;/li>
  263. &lt;li>&lt;a href="#goroutines">goroutines&lt;/a>&lt;/li>
  264. &lt;li>&lt;a href="#шифровние">Шифровние&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;/ul>
  269. &lt;/li>
  270. &lt;/ul>
  271. &lt;/nav>
  272. &lt;hr />
  273. &lt;/div>
  274. &lt;div class="flex align-center gdoc-page__anchorwrap">
  275. &lt;h2 id="конфигурация-и-всё-такое"
  276. >
  277. Конфигурация и всё такое
  278. &lt;/h2>
  279. &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">
  280. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  281. &lt;/a>
  282. &lt;/div>
  283. &lt;ul>
  284. &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>
  285. &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>
  286. &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>
  287. &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>
  288. &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>
  289. &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>
  290. &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>
  291. &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>
  292. &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>
  293. &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>
  294. &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>
  295. &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>
  296. &lt;/ul>
  297. &lt;hr>
  298. &lt;div class="flex align-center gdoc-page__anchorwrap">
  299. &lt;h2 id="логгирование"
  300. >
  301. Логгирование
  302. &lt;/h2>
  303. &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">
  304. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  305. &lt;/a>
  306. &lt;/div>
  307. &lt;ul>
  308. &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>
  309. &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>
  310. &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>
  311. &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>
  312. &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>
  313. &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>
  314. &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>
  315. &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>
  316. &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>
  317. &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>
  318. &lt;/ul>
  319. &lt;hr>
  320. &lt;div class="flex align-center gdoc-page__anchorwrap">
  321. &lt;h2 id="ui"
  322. >
  323. UI
  324. &lt;/h2>
  325. &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">
  326. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  327. &lt;/a>
  328. &lt;/div>
  329. &lt;div class="flex align-center gdoc-page__anchorwrap">
  330. &lt;h3 id="пользовательский-интерфейс-в-терминале"
  331. >
  332. Пользовательский интерфейс в терминале
  333. &lt;/h3>
  334. &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">
  335. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  336. &lt;/a>
  337. &lt;/div>
  338. &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>
  339. &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>
  340. &lt;div class="gdoc-toc gdoc-toc__level--6">
  341. &lt;nav id="TableOfContents">
  342. &lt;ul>
  343. &lt;li>
  344. &lt;ul>
  345. &lt;li>&lt;a href="#internationalization-i18n">Internationalization (i18n)&lt;/a>&lt;/li>
  346. &lt;li>&lt;a href="#localization-l10n">Localization (l10n)&lt;/a>&lt;/li>
  347. &lt;/ul>
  348. &lt;/li>
  349. &lt;/ul>
  350. &lt;/nav>
  351. &lt;hr />
  352. &lt;/div>
  353. &lt;div class="flex align-center gdoc-page__anchorwrap">
  354. &lt;h2 id="internationalization-i18n"
  355. >
  356. Internationalization (i18n)
  357. &lt;/h2>
  358. &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">
  359. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  360. &lt;/a>
  361. &lt;/div>
  362. &lt;p>Для форматирования вывода информации в национальном формате (например, чисел) используются следующие пакеты:&lt;/p>
  363. &lt;ul>
  364. &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>
  365. &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>
  366. &lt;/ul>
  367. &lt;p>По-умолчанию, они не установлены. Необходимо их скачать:&lt;/p>
  368. &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
  369. &lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">go get -u golang.org/x/text/message
  370. &lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Для вывода информации на основании языка используется тип &lt;code>message.Printer&lt;/code>.
  371. Используется он следующий образом:&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">
  372. &lt;nav id="TableOfContents">
  373. &lt;ul>
  374. &lt;li>
  375. &lt;ul>
  376. &lt;li>&lt;a href="#простейший-пример">Простейший пример&lt;/a>&lt;/li>
  377. &lt;/ul>
  378. &lt;/li>
  379. &lt;/ul>
  380. &lt;/nav>
  381. &lt;hr />
  382. &lt;/div>
  383. &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>
  384. &lt;div class="flex align-center gdoc-page__anchorwrap">
  385. &lt;h2 id="простейший-пример"
  386. >
  387. Простейший пример
  388. &lt;/h2>
  389. &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">
  390. &lt;svg class="gdoc-icon gdoc_link">&lt;use xlink:href="#gdoc_link">&lt;/use>&lt;/svg>
  391. &lt;/a>
  392. &lt;/div>
  393. &lt;p>Go, в отличие от других языков, использует свою нотацию для времени не &lt;code>yyyy-MM-dd&lt;/code>. Go использует мнемоническую нотацию:&lt;/p>
  394. &lt;p>&lt;code>Mon Jan 2 15:04:05 MST 2006&lt;/code>.&lt;/p>
  395. &lt;p>Её надо переписать в виде, котором надо. Проще всего это запомнить, если переписать её как &lt;code>01/02 03:04:05PM ‘06 -0700&lt;/code>.&lt;/p></description></item></channel></rss>