Как стать автором
Обновить
3.75

Go *

Компилируемый, многопоточный язык программирования

Сначала показывать
Порог рейтинга

Крутой инструмент для просмотра журналов в режиме реального времени.

Транслируйте любое содержимое в веб-интерфейс с автоматически сгенерированными фильтрами. 

Вы можете взять бинарник logdy, направить вывод логов в него, и вы получите на выходе  веб-интерфейс, для удобной работы и фильтрации логов. 

$ brew install logdy

#backend #golang.

Github: https://github.com/logdyhq/logdy-core

Demo: https://demo.logdy.dev/

Инструмент: https://logdy.dev/

#go #golang

Всем, кто любит Go и пишет на нем, еще больше интересного про Golang у меня в канале, там много полезного для Go разработчиков.

Теги:
+1
Комментарии0

🎊 Выпущены версии Go 1.22.3 и 1.21.10!

📣 Анонс: https://groups.google.com/g/golang-announce/c/wkkO4P9stm0

ознакомьтесь с примечаниями к выпуску для получения дополнительной информации:
https://go.dev/doc/devel/release#go1.22.3

Вы можете загрузить двоичный дистрибутив и дистрибутивы с исходным кодом с веб-сайта Go:
https://go.dev/dl/

Для компиляции из исходного кода с использованием клона Git обновите версию с
помощью git checkout go1.22.3 и выполните сборку в обычном режиме.

📦 Загрузить: https://go.dev/dl/#go1.22.3

Всем, кто пишет на Go, залетайте ко мне в канал, там много полезного для Go разработчиков.

#golang  #go

Теги:
+1
Комментарии0

Тренажёр для подготовки к собеседованию Golang ⚡️

 — go install github.com/rusinikita/trainer@latest

 После установки запускаем файл trainer, который на Windows лежит тут: C:\Users\%Userprofile%\go\bin

Это консольное приложение на Go для тестирования по основным темам, таким как структуры, мьютексы, WaitGroup, каналы

Есть разные вопросы, например, даётся код, необходимо указать, какая в нём проблема

Помимо всего прочего, сам этот тренажёр — отличная идея для пет-проекта

🖥 GitHub

🔥 А здесь я собрал базу с 1900 вопросами с собеседований по Go, микросервисам проектированию. 

Теги:
+3
Комментарии0
Теги:
+8
Комментарии0

👣 Go: распространенные антипаттерны

Самый простой способ писать хороший код заключается в том, чтобы не употреблять в своих программах «антипаттерны». Собственно, об этом и идёт речь в этой полезной статье

А вот некоторые из обсуждаемых антипаттернов:

🟡Возврат значения неэкспортируемого типа из экспортируемой функции

// Не рекомендовано
type unexportedType string
func ExportedFunc() unexportedType {
  return unexportedType("some string")
}

// Рекомендовано
type ExportedType string
func ExportedFunc() ExportedType {   
  return ExportedType("some string")
}

🟡Неоправданное использование пустых идентификаторов

идентификаторов
// Не рекомендовано
for _ = range sequence
{
    run()
}

x, _ := someMap[key]

_ = <-ch

// Рекомендовано
for range something
{
    run()
}

x := someMap[key]

<-ch

🟡Ненужное выражение return в функциях

// Бесполезное выражение return, не рекомендовано
func alwaysPrintFoofoo() {
    fmt.Println("foofoo")
    return
}

// Рекомендовано
func alwaysPrintFoo() {
    fmt.Println("foofoo")
}

🟡Ненужные команды break в выражениях switch

// Не рекомендовано
switch s {
case 1:
    fmt.Println("case one")
    break
case 2:
    fmt.Println("case two")
}

// Рекомендовано
switch s {
case 1:
    fmt.Println("case one")
case 2:
    fmt.Println("case two")
}

📎 Читать дальше

В своем канале я разобрал 1900 вопросов с собеседований Go разработчика, все любите Go - заходите в гости.

Теги:
+2
Комментарии0

Альтернативные библиотеки на Go ИИ библиотекам на Python.

В моем Golang канале мы рассматривали библиотеки для машинного обучения, nlp, cv , которые заменят вам популярные python мл библиотеки.

Python Golang Описание

NumPy ➡️ Gonum

NumPy - популярная библиотека Python для обработки многомерных массивов и матриц. Gonum предоставляет аналогичную функциональность в Go.

Scikit-learn ➡️ Golearn.

Scikit-learn - это библиотека машинного обучения, построенная на NumPy и SciPy, поддерживающая алгоритмы контролируемого и неконтролируемого обучения. Golearn - это аналогичная библиотека для Go, предлагающая ряд моделей и утилит.

Pandas ➡️ Dataframe-go 

Pandas - это библиотека Python для подготовки высокоуровневых наборов данных для машинного обучения и тренировки моделей. Dataframe-go предоставляет аналогичную функциональность для манипулирования данными в Go.

TensorFlow ➡️ Gorgonia 

TensorFlow библиотека с открытым исходным кодом Python используется для разработки и оценки моделей машинного обучения и глубокого обучения. Gorgonia - это аналогичная библиотека для машинного обучения на Go.

Seaborn ➡️ Gonum/plot 

Seaborn - это библиотека Python, используемая для визуализации данных в проектах ML. Gonum/plot предоставляет аналогичные возможности визуализации данных в Go.

Theano ➡️ Gorgonia 

Theano - это библиотека Python для численных вычислений и машинного обучения. 

Keras ➡️ Gorgonia 

Keras - это библиотека Python для разработки нейронных сетей для ML-моделей

PyTorch ➡️ Gorgonia 

Matplotlib ➡️ Gonum/plot 

Теги:
+4
Комментарии1

Go SDK
Будучи скромным гофером хочу отметить, что решение тех или иных задач - требует понимание базы и идиом языка. Конечно, есть замечательная документация, есть не менее замечательный хаб, но пока самые-самые сердечки это репозитория go, где в центре внимания легендарный пакет runtime и sync.
Вот несколько примеров, как описан sync.Map в коде, комментарии к которому и реализация методов отвечает на многие вопросы

//...
// Load, LoadAndDelete, LoadOrStore, Swap, CompareAndSwap, and CompareAndDelete
// are read operations; Delete, LoadAndDelete, Store, and Swap are write operations;
// LoadOrStore is a write operation when it returns loaded set to false;
// CompareAndSwap is a write operation when it returns swapped set to true;
// and CompareAndDelete is a write operation when it returns deleted set to true.
type Map struct {
//...
// Range may be O(N) with the number of elements in the map even if f returns
// false after a constant number of calls.
func (m *Map) Range(f func(key, value any) bool) {
	// We need to be able to iterate over all of the keys that were already
	// present at the start of the call to Range.
	// If read.amended is false, then read.m satisfies that property without
	// requiring us to hold m.mu for a long time.
	read := m.loadReadOnly()
	if read.amended {
		// m.dirty contains keys not in read.m. Fortunately, Range is already O(N)
		// (assuming the caller does not break out early)...
    ...

Всем приятного копания базы и профессионального роста.

Теги:
+4
Комментарии0

Как загрузить пакет из приватного репозитория Golang?

⏩Итак, ситуация. Есть приватный репозиторий. Можно склонировать себе данный репозититорий по ssh, но через go get / go install происходит ошибка:

go: unrecognized import path "private.gitlab.ru/repositoryName": https fetch: Get "https://private.gitlab.ru/repositoryName?go-get=1": dial tcp 255.255.255.255:443(левый IP адрес): i/o timeout

Попытки установить хост данного репозитория себе в переменные GONOPROXY / GOPRIVATE / GONOSUMDB не помогли, ошибка остаётся той же.

⏩Возможно, у кого-то тоже была такая проблема, надеюсь, этот совет ещё кому-то пригодится. Итак, если есть доступ по SSH, можно использовать такой вариант:

git config --global url."git@private.gitlab.ru".insteadOf "https://private.gitlab.ru"

🟡Или используя access-токен

git config --global url."https://${user}:${personal_access_token}@private.gitlab.ru".insteadOf"https://private.gitlab.ru"

После этого go get / go install будут работать с приватными репозиториями.

Больше полезного кода можете найти в Go канале.

Теги:
+1
Комментарии1

Мощная шпаргалка по Go  

Мощная шпаргалка по Go, которая покрывает практически все темы

Если пролистать хотя бы по диагонали, есть отличный от нуля шанс пройти собеседование и получить оффер)

Что внутри?

  • Компилятор

  • Пакеты

  • Функции

  • Управление памятью

  • Операторы

  • Управляющие структуры

  • Объектноориентированность

  • Интерфейсы

  • Обработка ошибок

  • Горутины (Goroutine)

  •  Проверка управления памятью

  •  Reflect 

  •  Добавление кода C

  •  GUI

  •   Распределенные системы

  • Шпаргалка

  • А здесь большая подборка материалов по Go: книги, шпаргалки, туториалы

Теги:
+7
Комментарии1

В go 1.22 провели изящный рефакторинг части когда по увеличение емкости среза на x1.25 относительно порога значения емкости в 256.
Не большой тест на arm M1 Pro:

const threshold = 256 
//v 1.21
func BenchmarkName121(b *testing.B) {  
  var newcap = threshold  
  var newLen = 100_000_000_000  
  for 0 < newcap && newcap < newLen {   
    newcap += (newcap + 3*threshold) / 4 
  }  
  if newcap <= 0 {   
    newcap = newLen  
  }
}

//v 1.22
func BenchmarkName122(b *testing.B) {
  var newcap = threshold 
  var newLen = 100_000_000_000  
  for {    
    newcap += (newcap + 3*threshold) >> 2    
    if uint(newcap) >= uint(newLen) {   
      break   
    }  
  }
}

В 8 из 10 прогонов результат одинаковый, в оставшихся - 121 показывает лучший результат
В 8 из 10 прогонов результат одинаковый, в оставшихся - 121 показывает лучший результат

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии1

👣 GoLand и его фишки

Для тех, кто ещё не пробовал использовать GoLand для работы с Go — попробуйте, вам понравится)

Вот некоторые фишки: 

Умное автодополнение. Автодополнение в GoLand помогает писать код быстрее. Сочетание клавиш Ctrl+Shift+Space вызывает список вариантов автодополнения, наиболее подходящих для данного контекста.

Инспекции и быстрые исправления. Обнаружив проблему, IDE тут же предложит ее исправить. Чтобы применить автоматическое исправление, просто нажмите Alt+Enter.

Генерация кода. В некоторых случаях GoLand может cгенерировать для вас тривиальный код. Например, если вы нажмете Ctrl+O, IDE поможет вам реализовать любой интерфейс, сгенерировав его методы.

Обнаружение рекурсивных вызовов. Если внутри вашей функции есть рекурсивный вызов, GoLand обнаружит его и поставит метку на поле редактора — это упростит чтение и понимание кода.

Действие Type Parameter. Действие Type Parameter (Alt+) всегда под рукой, если необходимо узнать тип выражения, на котором находится курсор.

Подсветка точек выхода. Каждая функция может иметь больше одного оператора return или panic. Чтобы быстро найти их все, нажмите Ctrl+Shift+F7, установив курсор на ключевом слове func, return или panic. Это поможет быстрее понять, как работает функция.

Вот такие классные возможности, так что пользуйтесь GoLand)

📎 Читать подробнее

Теги:
Всего голосов 5: ↑3 и ↓2+1
Комментарии0

Сверхполезный сайт со всей теорией по Go

🔥 На днях наткнулся на нереально полезный онлайн учебник по Go, чем и спешу поделиться. 

Здесь описывается абсолютно всё, что поможет подготовиться к собеседованию, и даже больше: 

  • Вопросы с собеседований связанные с Golang

  • Общие вопросы

  • Хеш-мапы

  • Интерфейсы

  • Пакеты

  • Типы данных

  • Defer

  • Примитивы синхронизации

  • Планировщик

  • Строки

  • Массивы и слайсы

  • Дженерики

  • Горутины

  • Конструкции

  • Гонка данных

  • Структуры

  • Контекст

  • Ошибки / Panic

  • Указатели

Вопросы с собеседований связанные с Linux

  • Файловая система

  • Сигналы, процессы

Вопросы по инфраструктуре

  • Базы данных (реляционные)

📎 Ссылка в tg-записи

Теги:
Всего голосов 12: ↑6 и ↓60
Комментарии1

👣 Флуд-контроль с помощью redis timeseries и Go

Итак, сразу к сути. 

Несколько экземпляров приложения могут стучаться к флуд-контролю, поэтому нужно использовать какую-нибудь БД.

1 идея: использовать SQL. Проблема: много возни с индексами по timestamp, т.к. обновление данных очень частое, следовательно перестройка индексов будет занимать много времени.

2 идея: использовать redis + timeseries. Решил воспользоваться ввиду наличия всех нужных методов: добавление timestamp по ключу (очевидно userID), а также любого числового значения (количество запросов во время timestamp); плюс наличие агрегации, автоматического удаления старых меток и готовой concurrency - если в один timestamp появится несколько нажатий, то они складываются. Осталось лишь написать это на Go.

Есть готовый пакет для работы с redis — github.com/redis/go-redis. В переменные окружения нужно добавить следующие переменные:

FC_REDIS_HOST=localhost

FC_REDIS_PORT=6379

FC_REDIS_PASSWORD=strongpassword

FC_RETENTION=5

FC_MAXCHECKS=4

FC_RETENTION и FC_MAXCHECKS, кстати, можно прописать прямо в коде. FC_RETENTION - количество секунд, за которые можно сделать не более FC_MAXCHECKS запросов.

Полный код

Теги:
Всего голосов 5: ↑3 и ↓2+1
Комментарии0

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

Питонисты! В 19:00 начинаем транслировать Selectel Python Meetup.

Присоединяйтесь к митапу, задавайте вопросы спикерам и общайтесь в чате с коллегами, работающими с сетевыми технологиями.

Смотрите трансляцию прямо в этом посте или переходите на YouTube.

Теги:
Всего голосов 8: ↑8 и ↓0+8
Комментарии0

28 марта в 19:00 мы проведем Selectel Python Meetup для разработчиков, техлидов и тимлидов разработки. Соберем экспертов из Selectel, Банка Точка и Yandex.Cloud. Обсудим «еще один» быстрый фреймворк, плюсы и минусы чистой архитектуры, опыт перехода с Python на Go.

Темы докладов:

  • «Черная овечка на фоне FastAPI»,

  • «Слоистая архитектура в Python-приложениях: гибкость кода vs оптимизация»,

  • «Перешел с Python на Go. Лучше стало?».

Регистрируйтесь на митап — будем ждать вас в онлайн-трансляции или в офисе Selectel.

Регистрация →

Теги:
Всего голосов 7: ↑7 и ↓0+7
Комментарии0

🦾 Лучшие Golang библиотеки для создания ботов


Полный список библиотек для работы с ботами.

  • bot — библиотека для создания Telegram‑ботов с нулевыми зависимостями.

  • echotron  — Элегантная и мощная библиотека для Telegram‑ботов.

  • ephemeral‑roles — создание Discord ботов

  • go‑chat‑bot — IRC, Slack и Telegram‑бот, написанный на Go.

  • go‑joe — Библиотека ботов общего назначения, вдохновленная Hubot, но написанная на Go.

  • go‑sarah — фреймворк для создания бота для LINE, Slack, Gitter и других платформ

  • go‑tg — форк официальной клиентской библиотеки docs Go для доступа к Telegram Bot API.

  • go‑tgbot — оболочка Golang Telegram Bot API.

  • go‑twitch‑irc — библиотека для написания ботов для twitch.tv чата

  • golang CryptoTrading Bot — Реализация консольного торгового бота на базе golang для криптовалютных бирж.

  • govkbot — Простая библиотека ботов Go VK.

  • hanu — фреймворк для написания Slack‑ботов.

  • kelp — официальный торговый и бот для Stellar DEX. Работает «из коробки», написан на Golang, совместим с централизованными биржами и пользовательскими торговыми стратегиями.

  • larry — Larry 🐦 — простой генератор твиттер‑ботов, который публикует твиты из случайных репозиториев с Github.

  • margelet — фреймворк для создания ботов Telegram.

  • micha — Библиотека Go для Telegram bot api.

  • olivia — Чат‑бот, созданный с использованием искусственной нейронной сети.

  • slack‑bot — Готовый к использованию Slack‑бот для ленивых разработчиков.

Теги:
Всего голосов 8: ↑7 и ↓1+6
Комментарии7

📚 Golang: Библиотеки и инструменты для работы с почтой.

Недавно в своем канале я опубликовал топ инструментов для создания GUI и для работы с аудио на Go. Сегодня я рассмотрим лучшие инстументы для работы с почтой.

  • chasquid — SMTP‑сервер, написанный на Go.

  • douceur — CSS‑инлайнер для ваших HTML‑писем.

  • email — гибкая библиотека работы с электронной почтой на Go.

  • email‑verifier — библиотека для проверки электронной почты без отправки писем.

  • go‑dkim — DKIM для подписи и проверки электронной почты.

  • go‑email‑normalizer — Библиотека Golang для нормализации электронной почты.

  • go‑email‑validator — Модульный валидатор электронной почты для проверки синтаксиса, содержания, smtp и т. д..

  • go‑imap — Библиотека IMAP для клиентов и серверов.

  • go‑mail — Простая библиотека Go для отправки писем на Go.

  • go‑message — библиотека для работы с Internet Message Format.

  • go‑premailer — стилизация для HTML‑почты в Go.

  • go‑simple‑mail — пакет для отправки почты с SMTP Keep Alive и двумя таймаутами: Connect и Send.

  • Hectane — SMTP‑клиент, предоставляющий API.

  • hermes — Пакет Golang, генерирующий HTML‑письма.

  • Maddy — «все в одном» (SMTP, IMAP, DKIM, DMARC, MTA‑STS, DANE).

  • mailchain — Отправка зашифрованных писем на адреса блокчейна.

  • mailgun‑go — Библиотека Go для отправки почты с помощью Mailgun API.

  • MailHog — тестирование электронной почты и SMTP с веб‑интерфейсом и API.

  • Mailpit — тестирования электронной почты и SMTP для разработчиков.

Теги:
Всего голосов 8: ↑6 и ↓2+4
Комментарии0

На GitHub под лицензией Apache License 2.0 опубликован проект под названием Nuke v1.1.0. Это реализация арены памяти для Go с бенчмарками и даже реализацией параллельной арены.

Арена памяти — это метод управления памятью, при котором сразу выделяется большой блок памяти, а его части используются для удовлетворения запросов выделения от программы. В контексте языка со сборкой мусора, такого как Go, использование арен памяти может дать несколько преимуществ:

  • повышение производительности: распределяя память большими блоками, арены памяти сокращают накладные расходы, связанные с частыми вызовами системного распределителя памяти;

  • Улучшенная локальность кэша. Арены памяти также могут улучшить локальность кэша, размещая тесно связанные объекты в одном блоке памяти;

  • эффективность сборки мусора. Использование арен памяти может снизить рабочую нагрузку на сборщик мусора за счёт уменьшения количества объектов, которые необходимо отслеживать и собирать, что приводит к меньшему времени паузы и более предсказуемой производительности.

Однако, хотя арены памяти предлагают эти преимущества, они не являются панацеей и имеют свои недостатки, такие как потенциальное увеличение использования памяти из-за неиспользуемого пространства внутри выделенных блоков. Необходимо тщательное рассмотрение и профилирование, чтобы определить, полезно ли использование арены памяти для конкретного приложения.

Теги:
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Проклятие дженериков 💀

Дженерики могут показаться очень простой темой.
Например, вот так в Java выглядят классные и простые методы интерфейса List:

interface List<E> extends Collection<E> {
	boolean add(E e);
	E set(int index, E element);
}

Но у обобщений много нюансов: вложенность, вариантность, границы и т.д. Это сильно усложняет их использование.
Вот не менее классный, но совсем непростой flatMap интерфейса Stream🙈:

interface Stream<T> extends BaseStream<T, Stream<T>> {
	<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
}

Также, реализация дженериков - всегда трейдоф. Мы либо получаем большой исполняемый файл, из-за того, что приходится генерировать код для разных типов. Либо получаем дополнительную нагрузку в рантайме, из-за различных проверок.

Из-за таких сложностей, в языке Go (философия которого - простота и минимализм) дженерики появились аж через 12 лет после релиза языка. А первый коммент про то что нужны дженерики появился меньше чем через 24 часа🙃

Во многих популярных языках дженерики появились не с первой версии, но рано или поздно, разработчики были вынуждены их ввести:

  • С++ вышел в 1979, дженерики - 1986

  • Java - 1996, дженерики - 2004

  • C# - 2001, дженерики - 2005

  • Go - 2009, дженерики - 2021

Теги:
Всего голосов 5: ↑3 и ↓2+1
Комментарии8

Поделитесь с командой создателей Go своими отзывами о разработке с помощью этого языка программирования.

Опрос для разработчиков Go 2024 открыт, и мы хотим услышать ваше мнение!

С 2016 года данные опросов разработчиков Go помогают нам определять ключевые модели использования, понимать проблемы разработчиков, узнавать предпочтения в отношении инструментов и отслеживать новые тенденции в сообществе. Ваши отзывы очень важны для формирования будущего Go, поэтому, пожалуйста, уделите 10–15 минут, чтобы заполнить опрос до 11 февраля 2024 года. Примите участие в опросе прямо сейчас!

Чем больше разработчиков примет участие, тем лучше мы сможем понять потребности сообщества Go. Вы можете помочь распространить информацию, поделившись этим опросом в своих социальных сетях, со своими коллегами и в любых других соответствующих сообществах.

Теги:
Рейтинг0
Комментарии0
1

Вклад авторов

Работа

Go разработчик
127 вакансий