37.1K subscribers
1.46K photos
34 videos
5 files
1.62K links
加入频道
Где разместить логгер в Golang?

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

Есть несколько способов сделать это, из которых я отдаю предпочтение одному. Я объясню почему.

При разработке приложения разработчик выбирает один из нескольких явных вариантов:

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

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

@Golang_google
Пишем REST API с использованием Gin + GORM.

https://carlosmv.hashnode.dev/building-a-rest-api-with-go-gin-framework-and-gorm

@Golang_google
Архиватор на Go: серия видеоуроков по Go от Николая Тузова

— Вводная часть, Variable-Length Code
— Каркас программы
— Алгоритм сжатия
— Распаковка сжатых файлов
— Работа над ошибками
— Рефакторинг
— Алгоритм Шеннона-Фано - теория
— Алгоритм Шеннона-Фано - реализация

Смотреть
Что читать Golang-разработчику. Семь главных книг: от Донована и Кернигана до МакДауэлл

Спрос на бэкенд-разработчиков — а Go неотделим от бэкенд-программирования — стабильно растет. У самого же Golang немало плюсов: простой, строгий, статически типизированный, он обладает развитой стандартной библиотекой и славится поддержкой параллельного и асинхронного программирования. При этом в Golang нет классов и нет поддержки наследования, что значительно повышает удобство поддержки кода. Благодаря этим и другим преимуществам Go в последние годы сохраняет статус популярного и перспективного языка.

В МойОфис мы широко используем Go в качестве основного языка для разработки корпоративной почты нового поколения Mailion. При этом разрабатываем на нём не только микросервисы, но и собственное хранилище с поддержкой дедупликации (про устройство Mailion читайте здесь). В связи с этим мы постоянно следим за книжными новинками и актуальными темами современной бэкенд-разработки. Специальной литературы по теме Golang существует немало, однако с помощью наших разработчиков мы выбрали самые важные, профессионально полезные и увлекательно написанные издания.

Делимся рекомендациями книг под катом!

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

@golang_books - библиотека Go разработчика

@Golang_google
GitHub - quii/learn-go-with-tests: Learn Go with test-driven development

https://github.com/quii/learn-go-with-tests

@Golang_google
✏️ Потоковая обработка на go1.18

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

Эта идея появилась у меня после данной публикации. В ней рассказывается о библиотеке для языка Go для обработки данных с использованием генериков. Я попробовал эту библиотеку в своем проекте и столкнулся с следующими недостатками:

настойчивое использование IO[A], который по сути представляет собой func()(A,error) то есть любую функцию, которая может вернуть ошибку. При написании кода это создает неудобства, потому что нужно всё заворачивать в этот IO и код превращается в жонглирование io.Map и io.FlatMap. Видимо это вдохновлено библиотеками с чисто функциональным подходом. Сделано это было, чтобы была функциональная чистота, что в итоге не очень (как по мне) ложится на процедурность языка Go.

Stream[A] это обертка над стейт-машиной. Стейт-машина в данном случае это структура, в которой либо ничего нет (конец потока), либо значение и продолжение (следующее состояние) машины. В итоге это создает две проблемы. Первая: чтобы создать стрим, нужно создать его продолжение, продолжение продолжения и тд. Единственный адекватный способ этим пользоваться, который я нашел - это рекурсия. Вкупе с отсутствием Tail call optimization это приводит к второй проблеме.

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

Построение типа Either[A,B]. По моему скромному мнению, это вообще тип, которого не хватает в Go и который разумно реализован в языке Rust. В библиотеке этот тип это структура, содержащая и элемент типа A и элемент типа B . Плюс булевое поле как способ идентификации какой из полей действителен на самом деле. Важно то, что по сути тип Either[A,B], семантика которого элемент типа A ИЛИ B, представляется в языке как пара из элемента типа A И элемента типа B.

Не совсем очевидный интерфейс. Хотя это скорее я не до конца разобрался, что и почему. Так или иначе, я считаю, что построил интерфейс более простой и прямолинейный, не потеряв в общности.

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

@Golang_google
🔌 Имплементируем WebSocket протокол на Go

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

@Golang_google
Golang-дайджест № 18 (1 – 30 июня 2022)

Интересное в этом выпуске
Выпущены версии 1.18.3 и 1.17.11;

Go 1.19 Beta 1 Released;

Обнаружен еще один ботнет на GO;

Собеседование Часть II что там с конкурентностью?

Приятного чтения!

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

@Golang_google
Разработка системы заметок с нуля

Часть 1
: проектирование микросервисной архитектуры
Мы спроектировали микросервисную архитектуру.

Часть 2: REST API для RESTful API Service + JWT + Swagger
Разработали RESTful API Service на Golang cо Swagger и авторизацией.

Часть 3: знакомство с Neo4j, работа над микросервисами CategoryService и APIService
Была посвящена знакомству с графовой БД Neo4j и работе над микросервисами CategoryService и APIService.

Часть 4: разработка микросервисов NoteService, TagService и UserService
Была посвящена разработке микросервисов.

Часть 5: знакомство с объектным хранилищем MinIO и разработка микросервиса на Golang
✈️ Веб-фреймворки для Golang в 2022 году: оптимальные варианты для разработчика

Golang продолжает развиваться, вместе с ним развивается и вся экосистема языка. В частности, появляются новые и обновляются существующие фреймворки. В этой статье мы сделаем небольшой обзор тех, что связаны с HTTP-бэкендом.

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

@Golang_google
🛠 Bud GO

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

На видео показан пошаговый процесс создания клона Hacker News с использованием Bud.

Код
Документация

@Golang_google
♻️ Мета выпустила переводчик на 200 языков.

В открытом доступе теперь лежит модель No language left behind (Ни один язык не останется за бортом), которая переводит с 200+ различных языков.

Модель уже применняется для улучшения переводов на Facebook, Instagram и Wikipedia.

Код
Статья
Demo
Blog

#AI #ML #NLP

@data_analysis_ml
Socialhunter

Инструмент, который сканирует указанные URL-адреса и находит ссылки в социальных сетях, которые можно взломать

В настоящее время поддерживает Twitter, Facebook, Instagram и Tiktok без каких-либо ключей API.

Github: https://github.com/utkusen/socialhunter

#Go #Privacy #Interesting

@Golang_google
Тестирование в Go: полный гайд с примерами.

Читать
Обработка ошибок приложений CLI в Golang 

https://dev-gang.ru/article/obrabotka-oshibok-prilozhenii-cli-v-golang-tizggrwzv1/

@Golang_google
Golang - оператор fallthrough

Оператор fallthrough используется в предложении case switch. Он должен использоваться в конце предложения case.

Он используется для выполнения следующего предложения case без проверки выражения.


Читать дальше
Спецификация Go

@Golang_google
@golang_interview - собираем здесь все возможные вопросы и ответы с собеседований по Go. Для всех уровней разработчиков. Присылайте свои задачи и вопросы, с которыми вы сталкивались на собеседованиях.

другие полезные ресурсы:
@golangtests - тесты и задачи GO
@golangl - чат
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go