Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Модное кулинарное Шоу! Игра в ресторан, приготовление блюд, декорирование домов и преображение внешности героев.

Кулинарные истории

Казуальные, Новеллы, Симуляторы

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • Animalrescueed Animalrescueed 36 постов
  • Oskanov Oskanov 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
1
Proglib
Proglib
1 год назад
Серия Итоги недели в мире бэкенда, обзоры новых сервисов

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах⁠⁠

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

📝 11 лучших инструментов для документации API

Документация служит всеобъемлющим руководством, объясняющим, как взаимодействовать с сервисом через API. Хорошая документация ускоряет процесс разработки, уменьшает количество ошибок и улучшает общее качество интеграции, поскольку включает в себя:

  • Описание конечных точек (эндпойнтов).

  • Форматы запросов и ответов.

  • Методы аутентификации.

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

  • Примеры использования.

Представляем подборку лучших инструментов для создания API-документации.

Swagger

Swagger – один из самых популярных инструментов: он поддерживает много языков программирования и предоставляет удобный интерфейс для проектирования и документирования API. Swagger позволяет определять конечные точки, форматы запросов и ответов, а также методы аутентификации. Кроме того, он предоставляет интерактивные инструменты для исследования и тестирования API.

Apidog

Apidog – комплексный инструмент для разработки, документирования и управления API. Он предлагает автоматическую генерацию интерактивной документации и возможность тестирования API в реальном времени. Apidog также поддерживает генерацию кода на разных языках программирования и предоставляет широкие возможности для настройки стиля документации.

ReDoc

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

DapperDox

DapperDox – опенсорсный OpenAPI-рендерер, совместимый с OAS 2.0 и 3.0. Он позволяет использовать контент в формате Markdown для создания диаграмм и предоставляет модуль исследования структуры API для практических экспериментов.

🎓☕ Подтянуть свои знания по Java вы можете на нашем телеграм-канале «Библиотека Java для собеса»

Theneo

Theneo – генератор документации, использующий ИИ для автоматического описания API. У него простой интерфейс, напоминающий Notion, и он поддерживает интеграции с Swagger, Postman и GitHub.

Sphinx

Sphinx – мощный генератор документации, широко используемый в Python-сообществе. Он поддерживает много языков и предлагает широкие возможности для настройки. Sphinx может генерировать документацию в разных форматах, включая HTML, PDF и ePub.

Javadoc

Javadoc специально разработан для документирования Java-кода. Он извлекает комментарии и аннотации из исходного кода для создания HTML-документации с подробным описанием классов, методов и полей.

DocFX

DocFX – генератор статических сайтов, разработанный Microsoft и с ноября 2022 года поддерживаемый сообществом .NET Foundation. Предлагает настраиваемые шаблоны для создания документации и лендингов.

Doxygen

Doxygen поддерживает C++, С, Objective-C, Python, Java, IDL, PHP, C# и Fortran, может генерировать документацию в разных форматах, включая HTML, PDF и LaTeX.

Slate

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

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

Интерактивная API-документация на Slate

➕➕🧩 Интересные задачи по C++ для практики можно найти на нашем телеграм-канале «Библиотека задач по С++»

Docusaurus

Docusaurus предназначен для создания современной интерактивной документации и любых других статических сайтов. Он поддерживает все популярные языки, предлагает настраиваемые шаблоны, имеет встроенную функцию поиска на базе Algolia, поддержку локализации и версионирования.

Приглашаем вас на вебинар «Как меняется математика в разных индустриях: от мобильных игр к фондовым рынкам», который состоится 22 августа в 20:00 по МСК. Там вы сможете:

  • Узнать, как математические методы влияют на мобильные игры и фондовые рынки.

  • Понять различия в математических подходах в разных сферах бизнеса.

  • Изучить реальные кейсы применения математики в GameDev и финансах.

  • Оценить, какие математические знания необходимы для успешной карьеры в Data Science.

Стать участником вебинара

😎 Автоматизация слепых SQL-инъекций на основе логических значений

Слепая SQL-инъекция на основе логического значения (Boolean-Based Blind SQL Injection) – тип SQL-инъекции, где атакующий не видит прямого вывода SQL-запроса, но может делать выводы на основе логических (истина/ложь) ответов от приложения (эти ответы могут проявляться в виде разных кодов состояния HTTP, разного содержимого ответа или реже разных заголовков).

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

  • Простейший метод – извлекать данные по одному символу, используя функции SUBSTRING() и ASCII() в MySQL. Это позволяет узнавать значение каждого символа в строке путем сравнения с ASCII-кодами.

  • Оптимизированный подход – использовать алгоритм бинарного поиска. Это сокращает количество запросов для определения одного символа с 96 до 7, что значительно ускоряет процесс и делает атаку менее заметной.

  • Дополнительные приемы для извлечения разных типов данных включают использование подзапросов для выбора данных из произвольных таблиц, объединение значений из нескольких строк в одну строку с помощью GROUP_CONCAT и преобразование разных типов данных (числа, даты и т. д.) в строки, которые легче извлечь.

Для дальнейшего ускорения процесса можно использовать многопоточность с помощью ThreadPoolExecutor из библиотеки concurrent.futures.

🦫🎓 Подтянуть свои знания по Go вы можете на нашем телеграм-канале «Библиотека Go для собеса»

📶 Паттерны коммуникации в распределенных системах

Распределенные системы состоят из многих отдельных частей (или узлов), работающих вместе, но физически расположенных в разных местах. Эти части системы должны общаться друг с другом через сеть, чтобы система могла функционировать как единое целое. Хотя коммуникация критически важна, правильно ее организовать бывает непросто: разработчики иногда пытаются использовать один и тот же подход ко всем задачам коммуникации, что может быть неэффективно. Важно понимать, что существуют разные способы организации коммуникации, и выбор правильного метода зависит от конкретной задачи. Рассмотрим основные паттерны коммуникации, которые можно использовать для решения разных задач.

Запрос-ответ с HTTP

Этот синхронный паттерн коммуникации предполагает, что один сервис отправляет запрос другому сервису и ожидает ответа или ошибки, блокируя свою работу до получения результата. REST, наиболее популярный архитектурный стиль для этой модели коммуникации, использует методы протокола HTTP – GET, POST, PUT и DELETE.

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

HTTP-запрос и ответ 

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

Общие данные

Этот паттерн часто остается незамеченным, поскольку разработчики не всегда воспринимают его как модель коммуникации. В рамках этого подхода один компонент записывает данные в определенное место, а другой компонент считывает и обрабатывает эти данные. Например, один сервис может загрузить файл в облачное объектное хранилище (например, в корзину Amazon S3), а другой сервис затем извлекает этот файл для дальнейших действий.

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

Общие данные

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

Асинхронный запрос-ответ

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

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

Асинхронный запрос-ответ

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

🧩☕ Интересные задачи по Java для практики можно найти на нашем телеграм-канале «Библиотека задач по Java»

Коммуникация на основе событий

В этом подходе сервисы не общаются напрямую друг с другом, а генерируют события, которые могут быть использованы другими сервисами. Это требует наличия места для отправки данных о событиях и механизма, позволяющего получающим сервисам обнаруживать эти события. Брокеры сообщений, такие как RabbitMQ, могут обрабатывать оба этих аспекта. Издатели используют API для отправки событий в брокер, который управляет подписками и уведомляет подписчиков при поступлении события.

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

Коммуникация на основе событий

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

🛠️ Инструменты

Postgres Sandbox – ИИ-песочница для работы с PostgreSQL в браузере. Проект реализован на PGlite – легковесной версии PostgreSQL, скомпилированной в WebAssembly и упакованной в клиентскую библиотеку TypeScript. Это позволяет запускать базу данных PostgreSQL непосредственно в браузере, Node.js и Bun без необходимости устанавливать другие зависимости. Размер PGLite – всего 3 Мб после сжатия Gzip, при этом база поддерживает многие расширения PostgreSQL, включая pgvector.

textual-plotext – виджет-обертка библиотеки для построения графиков Plotext. Визуализирует данные из Python-скриптов прямо в терминале.

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

Такие графики можно строить прямо в терминале

➕➕🎓 Подтянуть свои знания по C++ вы можете на нашем телеграм-канале «Библиотека С++ для собеса»

BunkerWeb – опенсорсный веб-фаервол (WAF), созданный на основе NGINX. Предназначен для защиты веб-сервисов – делает их безопасными по умолчанию. Легко интегрируется в существующие среды (Linux, Docker, Swarm, Kubernetes и т. д.), полностью адаптируется под ваши специфические требования. Предоставляет удобный веб-интерфейс и систему плагинов.

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

Viking – инструмент для управления удаленными серверами (и группами серверов) через SSH.

Terminus – опенсорсная ОС на базе Kubernetes, которая позволяет создать домашнее облако на собственном сервере. Подходит для любых задач – локального хостинга LLM, хаба по управлению IoT-девайсами, персонального репозитория или рабочего пространства.

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

Собственное облако Terminus

DeltaDB – легковесная, быстрая и масштабируемая база данных, созданная на основе polars и deltalake. Предназначена для разработчиков и организаций, которым нужно эффективное, простое и гибкое решение для обработки больших объемов данных с высокой скоростью и масштабируемостью.

emval – супербыстрый валидатор email-адресов для Python-приложений, написанный на Rust.

Итоги недели в мире бэкенда и обзоры новых сервисов: паттерны коммуникации в распределенных системах IT, Инновации, Микросервисы, Программирование, Разработка, Технологии, Golang, Java, Python, Длиннопост, YouTube, YouTube (ссылка), Видео

emval работает в 100–1000 раз быстрее других подобных модулей

🦫🧩 Интересные задачи по Go для практики можно найти на нашем телеграм-канале «Библиотека задач по Go»

RustPython – интерпретатор Python, написанный на Rust.

Автор рассылки: Наталья Кайда

📧 Подписаться на рассылку

Показать полностью 8 6
IT Инновации Микросервисы Программирование Разработка Технологии Golang Java Python Длиннопост YouTube YouTube (ссылка) Видео
0
Партнёрский материал Реклама
specials
specials

Жизнь разработчика в российском финтехе: коты, йога, удалёнка и коробка с подарками⁠⁠

Жизнь разработчика в российском финтехе: коты, йога, удалёнка и коробка с подарками IT, Golang, Вакансии, Истории из жизни

Ozon Fintech расширяется и набирает новых сотрудников. Чтобы узнать, как живется программистам в этой сфере, мы поговорили с одним из разработчиков компании и попросили рассказать о своем трудовом дне, важных задачах и обо всем, ради чего стоит приезжать в офис (спойлер: там есть даже бар!).


Привет, меня зовут Дмитрий. Я уже четвертый год работаю в Ozon Fintech — это подразделение компании, которое создает новые финансовые продукты. Изначально я пришел на направление банковских карт. Через какое-то время мой руководитель заметил во мне лидерские качества и предложил стать тимлидом. Все получилось, правда, не сразу (но об этом расскажу позже).


Я хорошо помню, как приехал на собеседование. К тому времени я недолго жил в Москве, а в «Москва-Сити» вообще не был ни разу — и тут я попадаю в этот район небоскребов! Сначала подумал, что сейчас зайду в офис, а там мне сразу дадут пачку билетов с сотней вопросов, и если я не отвечу на какой-нибудь 99-й, то провалю собеседование. Но все оказалось проще. На интервью мы в спокойной обстановке обсуждали разные технические вопросы, никаких экзаменов.

Жизнь разработчика в российском финтехе: коты, йога, удалёнка и коробка с подарками IT, Golang, Вакансии, Истории из жизни

Помню, как мы идем по офису на 49-м этаже, а я думаю: «Очень красиво и здорово, конечно, но к окну я пока подходить побаиваюсь».


В первый день показывают рабочее место и выдают ноутбук (у нас можно выбрать «операционку»: Windows, MacOS или Linux). Всем новичкам дарят приветственную коробку с подарками, а по праздникам — мерч компании. Вещи стильные и хорошо сделаны, ими хочется пользоваться.

Жизнь разработчика в российском финтехе: коты, йога, удалёнка и коробка с подарками IT, Golang, Вакансии, Истории из жизни

Когда я только пришел в финтех, в команде проекта нас было немного, человек 20–30. Сейчас там уже под 500 специалистов. Поскольку мы делаем успешные продукты, подразделение растет и нужно больше золота сотрудников. Посмотрите, какие вакансии есть прямо сейчас. Если где-то узнали себя — скорее отправляйте резюме.


• Разработчик Go в группу клиентских сервисов

• Разработчик продуктовых сервисов на Go

• Разработчик финансовых сервисов на Go

• Старший разработчик Go

• Старший разработчик iOS

• QA-инженер

• Инженер по автоматизации тестирования

• Старший инженер по автоматизации тестирования

• Инженер devops

• Маркетинговый аналитик

От кандидатов на позицию разработчика ждут опыта на Golang. Но если вы пишете на другом языке и готовы «пересесть» на Go — так тоже можно. На собеседовании будут оценивать только знания алгоритмов и структур данных, баз данных и архитектуры.

Коробка с подарками — не самое интересное, что встречается сотрудникам в финтехе. Читайте дальше :)

Жизнь разработчика в российском финтехе: коты, йога, удалёнка и коробка с подарками IT, Golang, Вакансии, Истории из жизни

По опыту могу сказать, что первое время работы — самое сложное. Ты только пришел, еще не понимаешь, что делать. А что, если допустишь ошибку? В начале очень нужен наставник, которому ты доверяешь и можешь прийти в любой момент. У нас в финтехе на первом этапе у каждого сотрудника он есть и готов объяснить, что у нас за компания, какие у нее цели и зачем мы все вообще работаем. Потом, конечно, привыкаешь, обживаешься, необходимость в наставнике пропадает.

Жизнь разработчика в российском финтехе: коты, йога, удалёнка и коробка с подарками IT, Golang, Вакансии, Истории из жизни

У нас работают удаленщики из разных уголков страны, но даже местные могут договориться о комфортном режиме посещения офиса. Где-то раз в квартал мы с коллегами собираемся поработать все вместе (сотрудникам из других городов оформляем командировку в Москву, компания оплачивает транспорт и отель), а вечером ходим отдохнуть. А я хоть и живу в Москве, но почти не бываю в офисе. Приезжаю, только если соскучился по коллегам, или вот, например, ради фотографий для поста. Каким бы ни был классным офис, но все же у меня дома два кота, которые будят меня в 5 утра гремящими игрушками.


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


У нас нет фиксированных рабочих часов — каждый выбирает удобное время для себя. Единственное, мы договорились, что с 12 до 17 все должны быть на связи. В остальном на часы никто не смотрит: работу оценивают по результатам.


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

Жизнь разработчика в российском финтехе: коты, йога, удалёнка и коробка с подарками IT, Golang, Вакансии, Истории из жизни

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


Кроме бара есть другие «плюшки» от компании, более привычные: ДМС со стоматологией, врач и психолог в офисе, бесплатная йога, скидки на абонементы в фитнес-клубы (для москвичей, а для удаленщиков — сервис «Фитмост») и обеды в соседних заведениях. Все это каждый новый сотрудник получает в начале работы. А еще компания дарит промокоды на Ozon Premium и открывает доступ к особым спецпредложениям и скидкам.


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

Жизнь разработчика в российском финтехе: коты, йога, удалёнка и коробка с подарками IT, Golang, Вакансии, Истории из жизни
Жизнь разработчика в российском финтехе: коты, йога, удалёнка и коробка с подарками IT, Golang, Вакансии, Истории из жизни

У нас в офисе удобные и безопасные для спины кресла. На вид обычные, но когда кто-нибудь узнает их цену, часто восклицают: «Что? Это же просто черное кресло!» Да, просто кресло, но в нем не болит поясница. Для тех, кому кресло надоело, есть рабочие зоны с диванами и пуфиками.


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

Жизнь разработчика в российском финтехе: коты, йога, удалёнка и коробка с подарками IT, Golang, Вакансии, Истории из жизни

В начале поста я обещал рассказать, почему не сразу стал тимлидом. Так вот. Когда я согласился на эту роль, очень быстро стало понятно, что у меня не получается. Было только представление, что нужно делать, а вот как — непонятно. Ощущения не очень: будто сидишь в лодке посреди океана и не знаешь, куда плыть.


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


После этого у меня стало получаться гораздо лучше. Сейчас я уже начинаю сам помогать другим ребятам становиться руководителями.

Жизнь разработчика в российском финтехе: коты, йога, удалёнка и коробка с подарками IT, Golang, Вакансии, Истории из жизни

Вот так и работает программист в Ozon Fintech. Наше подразделении активно растет, у нас много проектов, интересных задач и челленджей, поэтому нужны светлые головы. Приходите к нам!


ПОСМОТРЕТЬ ВАКАНСИИ

Показать полностью 9
IT Golang Вакансии Истории из жизни
0
PENTEST.DNA
PENTEST.DNA
1 год назад
Web-технологии

Подключение к базам данных и запрос информации с помощью Go⁠⁠

Подключение к базам данных и запрос информации с помощью Go Информационная безопасность, Хакеры, Golang, Программирование, Безопасность, IT, Взлом, Программист, Длиннопост

Запрос данных из MongoDBL:


Несмотря на наличие прекрасного стандартного 𝗦𝗤𝗟-пакета, 𝗚𝗼 не поддерживает аналогичный пакет для работы с базами данных 𝗡𝗼𝗦𝗤𝗟. Для этого вам придется использовать сторонние инструменты. Вместо изучения реализации каждого такого стороннего пакета мы сосредоточимся исключительно на 𝗠𝗼𝗻𝗴𝗼𝗗𝗕. Для этого будем применять драйвер 𝗺𝗴𝗼 (произносится «манго»). Начните с установки 𝗺𝗴𝗼:

Подключение к базам данных и запрос информации с помощью Go Информационная безопасность, Хакеры, Golang, Программирование, Безопасность, IT, Взлом, Программист, Длиннопост

Теперь можно установить подключение и запросить коллекцию 𝘀𝘁𝗼𝗿𝗲 (эквивалент таблицы), для чего потребуется еще меньше кода, чем в примере с 𝗦𝗤𝗟, который мы создадим чуть позже.

Подключение к базам данных и запрос информации с помощью Go Информационная безопасность, Хакеры, Golang, Программирование, Безопасность, IT, Взлом, Программист, Длиннопост

Подключение к базе данных MongoDB и запрос данных

Сначала идет определение типа 𝗧𝗿𝗮𝗻𝘀𝗮𝗰𝘁𝗶𝗼𝗻, который будет представлять один документ из коллекции 𝘀𝘁𝗼𝗿𝗲. Внутренний механизм представления данных в 𝗠𝗼𝗻𝗴𝗼𝗗𝗕 — это двоичный 𝗝𝗦𝗢𝗡. По этой причине для определения любых директив маршалинга используются теги. В этом случае с их помощью мы явно определяем имена элементов для применения в двоичных данных 𝗝𝗦𝗢𝗡.

В функции 𝗺𝗮𝗶𝗻() вызов 𝗺𝗴𝗼.𝗗𝗶𝗮𝗹() создает сессию, устанавливая подключение к базе данных, выполняя тестирование на наличие ошибок и реализуя отложенный вызов для закрытия сессии. После этого с помощью переменной 𝘀𝗲𝘀𝘀𝗶𝗼𝗻 запрашивается база данных 𝘀𝘁𝗼𝗿𝗲, откуда извлекаются все записи коллекции 𝘁𝗿𝗮𝗻𝘀𝗮𝗰𝘁𝗶𝗼𝗻𝘀. Результаты мы сохраняем в срезе 𝗧𝗿𝗮𝗻𝘀𝗮𝗰𝘁𝗶𝗼𝗻 под названием 𝗿𝗲𝘀𝘂𝗹𝘁𝘀. Теги структуры используются для демаршалинга двоичного 𝗝𝗦𝗢𝗡 в определенный нами тип. В завершение выполняется перебор результатов и их вывод на экран. И в этом случае, и в примере с 𝗦𝗤𝗟 из следующего раздела вывод должен выглядеть так:

Подключение к базам данных и запрос информации с помощью Go Информационная безопасность, Хакеры, Golang, Программирование, Безопасность, IT, Взлом, Программист, Длиннопост


Обращение к базам данных SQL:



𝗚𝗼 содержит стандартный пакет 𝗱𝗮𝘁𝗮𝗯𝗮𝘀𝗲/𝘀𝗾𝗹, который определяет интерфейс для взаимодействия с базами данных 𝗦𝗤𝗟 и их аналогами. Базовая реализация автоматически включает такую функциональность, как пул подключений и поддержка транзакций. Драйверы базы данных, соответствующие этому интерфейсу, автоматически наследуют эти возможности и, по сути, являются взаимозаменяемыми, поскольку 𝗔𝗣𝗜 между ними остается согласованным. Вызовы функций и реализация в коде идентичны независимо от того, используете вы 𝗣𝗼𝘀𝘁𝗴𝗿𝗲𝘀, 𝗠𝗦𝗦𝗤𝗟, 𝗠𝘆𝗦𝗤𝗟 или другой драйвер. В результате этого удобно менять серверные базы данных при минимальном изменении кода клиента. Конечно же, эти драйверы могут реализовывать специфичные для БД возможности и задействовать различный 𝗦𝗤𝗟-синтаксис, но вызовы функций при этом практически одинаковы. Поэтому мы покажем, как подключать всего одну базу данных 𝗦𝗤𝗟 — 𝗠𝘆𝗦𝗤𝗟, а остальные БД 𝗦𝗤𝗟 оставим в качестве самостоятельного упражнения. Начнем с установки драйвера:

Подключение к базам данных и запрос информации с помощью Go Информационная безопасность, Хакеры, Golang, Программирование, Безопасность, IT, Взлом, Программист, Длиннопост

Далее создадим простой клиент, который подключается к этой базе данных и извлекает информацию из таблицы transactions, как показано в коде ниже.

Подключение к базам данных и запрос информации с помощью Go Информационная безопасность, Хакеры, Golang, Программирование, Безопасность, IT, Взлом, Программист, Длиннопост

Код начинается с импорта пакета 𝗚𝗼 𝗱𝗮𝘁𝗮𝗯𝗮𝘀𝗲/𝘀𝗾𝗹. Это позволяет реализовать взаимодействие с базой данных через удобный интерфейс стандартной библиотеки 𝗦𝗤𝗟. Кроме того, мы импортируем драйвер базы данных. Начальное подчеркивание указывает на то, что она импортируется анонимно, то есть ее экспортируемые типы не включаются, но драйвер регистрируется пакетом 𝘀𝗾𝗹, и в результате драйвер 𝗠𝘆𝗦𝗤𝗟 сам обрабатывает вызовы функций.

Далее идет вызов 𝘀𝗾𝗹.𝗢𝗽𝗲𝗻() для установки подключения к базе данных. Первый параметр указывает, какой драйвер использовать — в данном случае это 𝗺𝘆𝘀𝗾𝗹, а второй определяет строку подключения. Затем мы обращаемся к базе данных, передавая инструкцию 𝗦𝗤𝗟 для выбора всех строк из таблицы 𝘁𝗿𝗮𝗻𝘀𝗮𝗰𝘁𝗶𝗼𝗻𝘀, после чего перебираем эти строки, последовательно считывая данные в переменные и выводя значения.

Это все, что необходимо для запроса данных из 𝗠𝘆𝗦𝗤𝗟. Для использования другой серверной БД потребуется внести в код лишь минимальные изменения:

  • импортировать подходящий драйвер базы данных;

  • изменить передаваемые в sql.Open() параметры;

  • скорректировать SQL-синтаксис в соответствии с требованиями серверной базы данных.

Среди нескольких доступных драйверов баз данных часть написаны на чистом 𝗚𝗼. А некоторые другие используют 𝗰𝗴𝗼 для ряда внутренних взаимодействий. Полный список доступных драйверов можно найти здесь: 𝗵𝘁𝘁𝗽𝘀://𝗴𝗶𝘁𝗵𝘂𝗯.𝗰𝗼𝗺/𝗴𝗼𝗹𝗮𝗻𝗴/𝗴𝗼/𝘄𝗶𝗸𝗶/𝗦𝗤𝗟𝗗𝗿𝗶𝘃𝗲𝗿𝘀/.

ССЫЛКА НА ТЕЛЕГРАМ КАНАЛ АВТОРА

Показать полностью 5
[моё] Информационная безопасность Хакеры Golang Программирование Безопасность IT Взлом Программист Длиннопост
0
Вопрос из ленты «Эксперты»
user4414420
1 год назад

Стоит ли учить Golang в 2024 году?⁠⁠

Здравствуйте!

Меня заинтересовали этот язык программирования, в связи с чем хотелось бы задать несколько вопросов всём желающим на них ответить.

Немного о себе: основной язык С++, поверхностно знаю и время от времени использую десятку популярных языков: C#, Java, JS и так далее.

1) Как обстоят дела с развитием Go? Я читал, что это достаточно новый язык. Те обновления, что в него вносятся в настоящее время делают его лучше? Как сообщество относится к этому?

2) Почему он был придуман и какие задачи решает? Я просто могу провести параллель с С++ и Carbon, как продолжение С++. Сейчас про Carbon практически никто не знает, а в продакшене не используются вообще.

3) Интересно было бы узнать, в каких связках Вы использовали эти языки как в продакшене, так и в пет-проектах. Какие ещё инструменты входили в стек разработки?

4) Как обстоят дела с IDE? Какая на Ваш выбор является лучшей?

5) Легко ли писать и отлаживать кроссплатформенный код? На каких платформах существуют компиляторы?

6) Как обстоят дела на рынке? Мне как потенциальному джуну на этом ЯП, понятное дело, сейчас туда бессмысленно соваться, поэтому хотелось бы узнать изменение. Как было раньше, как обстоят дела сейчас и что по Вашему мнению ожидать дальше?

7) Какая ЗП в зависимости от уровня и компаний? Скорее всего, вопрос будет без ответа, но и не задать не могу. Буду благодарен хотя бы вилкам.

8) Какую литературу бы посоветовали?

9) Как относитесь к другим языкам, которые решают похожие задачи? В чем преимущества или недостатки Go перед Elixir, Java, C# и далее, например, при написании сервисов? Было бы интересно узнать и о других областях, в которых имела бы место конкуренция этих ЯП.

Всем спасибо за ответы!

Показать полностью
IT Вопрос Golang Спроси Пикабу Текст
17
ce777x
ce777x
3 года назад
Лига программистов

Golang⁠⁠

Всём доброго времени суток, подскажите Golang в качестве первого яп, реально? Или лучше начать с python?

P.S. да я один из дохулиарда людей которые захотели в IT! Т.к. не вижу в потенциальных 5-7 годах никаких перспектив кроме IT.

Работа Программирование Программист Python IT Golang Текст
84
Ado27nb
1 год назад

Быть или не быть?⁠⁠

Всём доброго времени суток!
Это мой первый пост ( о помощи)
Работаю монтажником оконный конструкций. Зп хорошая, не жалуюсь. Но так сказать всё надоело, прикипели(работаю с 8 утра и примерно до 6 вечера, всегда по разному, ещё есть маленький и любимый сын)и понимаю, что всю жизнь не смогу так работать. Тянет меня в IT, начал многи посты читать, какие вообще направления есть. Понравился язык Golang (самообучаюсь), но не знаю правильно ли я что делаю и то ли направление выбрал и что я вообще хочу от изучения данного языка.
Помощь прошу в том чтобы подсказать или посоветовать мб какие либо онлайн курсы
или литературу дополнительно(читаю сейчас Донована)
Извиняюсь за корявость поста
Всем добра
p.s. Вообще для меня сначала в идеале, это ТГ боты с AI. Но с тем временем, которое у меня есть для самообучения уйдёт лет 10, а то и больше

#работа
#IT
#обучение
#junior
#програмирование

[моё] IT Golang Искусственный интеллект Обучение Работа
28
user9315307
user9315307
5 месяцев назад
Серия Удачные неудачные проекты

Пришло время вывести мой пет-проект на Go в реальный мир!⁠⁠

Пришло время вывести мой пет-проект на Go в реальный мир! Мультсериалы, Gravity Falls, Программирование, Golang, IT, Приложение

Мои дети, как и я, обожают Гравити Фолз, а у младшего сына даже есть коллекция наклеек с героями. Это и натолкнуло меня на идею: а почему бы не сделать уникальные брелоки?

Чуть-чуть эпоксидной смолы, 20 часов ожидания – и вот они, таинственные артефакты из загадочного городка! Каждый брелок скрывает QR-код с посланием от персонажа.

Правда, есть нюанс... Из-за небольшой ошибки в коде генерации QR сканирование ведёт только на главную страницу, а остаток ссылки придётся дописать вручную - но так даже интереснее!

Показать полностью 1
[моё] Мультсериалы Gravity Falls Программирование Golang IT Приложение
4
FreshAngry007
1 год назад

Слайсы и Go⁠⁠

Слайсы в Go — это удобный, динамический интерфейс к массивам. Они обеспечивают большую гибкость, по сравнению с традиционными массивами. В отличие от массивов, размер слайса не является частью его типа, что позволяет слайсам быть гораздо более динамичными.

Слайс состоит из трех компонентов:

  • Указатель на начальный элемент массива, к которому применяется слайс.

  • Длина слайса (len), указывающая на количество элементов в слайсе.

  • Емкость слайса (cap), которая указывает на максимальное количество элементов, начиная с текущего указателя, до конца базового массива.

Как слайсы работают

Когда вы создаете слайс, Go автоматически выделяет под него массив в памяти. Слайс предоставляет ссылку на начало этого массива и позволяет работать с его частью. Изменение элементов слайса напрямую влияет на соответствующие элементы массива, так как слайс является просто "окном" в массив.

Динамическое изменение размера

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

Создание и инициализация

Слайсы можно создать несколькими способами:

  • Используя оператор make, который позволяет указать тип, начальную длину и (необязательно) емкость слайса. Например, make([]int, 5, 10).

  • Через литерал слайса, например, []int{1, 2, 3}.

  • Оператором [:], [low:high], [low:high:max] для создания слайса из массива или другого слайса.

Подводные камни

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

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

1. Непреднамеренное изменение базового массива

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

package main

import "fmt"

func modifySlice(s []int) {

s[0] = 999 // Изменяет первый элемент базового массива

}

func main() {

originalSlice := []int{1, 2, 3}

modifySlice(originalSlice)

// Вывод: [999 2 3]

fmt.Println(originalSlice)

}

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

1.1. Решение

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

package main

import "fmt"

func CopyAndModifySlice(s []int) []int {

// Создаем новый слайс и копируем в него данные из s

newSlice := make([]int, len(s))

copy(newSlice, s)

// Изменяем новый слайс

newSlice[0] = 999

return newSlice

}

func main() {

originalSlice := []int{1, 2, 3}

modifynewSlice := CopyAndModifySlice(originalSlice)

// Вывод: [1 2 3]

fmt.Println(originalSlice)

// Вывод: [999 2 3]

fmt.Println(modifynewSlice )

}

2. Утечка памяти из-за неправильного срезания слайсов

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

package main

import "fmt"

func getSmallSlice() []int {

// Большой массив

bigSlice := make([]int, 1000000)

// Маленький слайс, ссылается на начало большого массива

smallSlice := bigSlice[:3]

return smallSlice

}

func main() {

smallSlice := getSmallSlice()

fmt.Println(cap(smallSlice)) // Вывод: 1000000

// В этот момент вся память, занимаемая bigSlice, все еще занята,

// несмотря на то что мы работаем только с маленьким сегментом.

}

В этом примере, bigSlice больше недоступен после выполнения getSmallSlice, но память, которую он занимает, остается занятой из-за smallSlice, который ссылается на часть bigSlice. Это может привести к неэффективному использованию памяти, особенно если подобный код выполняется многократно.

2.1. Решение

package main

import "fmt"

func getSmallSlice() []int {

// Большой массив

bigSlice := make([]int, 1000000)

// Создаем новый слайс того же размера, что и нужный маленький слайс

smallSlice := make([]int, 3)

// Копируем данные из большого массива в маленький слайс

copy(smallSlice, bigSlice[:3])

return smallSlice

}

func main() {

smallSlice := getSmallSlice()

fmt.Println(cap(smallSlice)) // Вывод: 3

// Теперь большой массив может быть собран сборщиком мусора,

// так как на него нет ссылок в виде слайса.

}

3. Увеличение емкости (capacity) слайса неявно

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

package main

import "fmt"

func main() {

// Слайс с начальной емкостью 1

s := make([]int, 0, 1)

prevCap := cap(s)

// Потенциально много раз увеличиваем емкость

for i := 0; i < 1024; i++ {

if cap(s) != prevCap {

fmt.Printf("Емкость изменилась с %d на %d\n", prevCap, cap(s))

prevCap = cap(s)

}

s = append(s, i)

}

}

// Емкость изменилась с 1 на 2

// Емкость изменилась с 2 на 4

// Емкость изменилась с 4 на 8

// Емкость изменилась с 8 на 16

// Емкость изменилась с 16 на 32

// Емкость изменилась с 32 на 64

// Емкость изменилась с 64 на 128

// Емкость изменилась с 128 на 256

// Емкость изменилась с 256 на 512

// Емкость изменилась с 512 на 848

// Емкость изменилась с 848 на 1280

В этом примере слайс s начинается с емкости 1 и увеличивается многократно по мере добавления элементов, что может привести к множественным аллокациям памяти и копированиям.

3.1. Решение

package main

import "fmt"

func main() {

// Заранее выделяем слайс с нужной емкостью

// Емкость сразу выделена под 1024 элемента

s := make([]int, 0, 1024)

// Добавляем элементы, не вызывая дополнительных аллокаций

for i := 0; i < 1024; i++ {

s = append(s, i)

}

// Вывод: 1024 1024

fmt.Println(len(s), cap(s))

}

// емкость не менялась не разу

4. Потенциальная потеря данных при неосторожном использовании append

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

package main

import "fmt"

func main() {

s1 := make([]int, 0, 5)

// s2 указывает на новый слайс

s2 := append(s1, 1)

// s3 тоже указывает на новый слайс, но уже другой

s3 := append(s1, 2)

// [] [1] [2] - s1 остается без изменений

fmt.Println(s1, s2, s3)

}

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

4.1. Решение

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

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

package main

import "fmt"

func main() {

s1 := make([]int, 0, 5)

// Присваиваем результат append обратно s1

s1 = append(s1, 1)

// s2 теперь будет содержать [1 2]

s2 := append(s1, 2)

// Вывод: [1] [1 2] - s1 изменен корректно

fmt.Println(s1, s2)

}

Поиграться с примерами можно тут https://go.dev/play

Показать полностью
[моё] Программирование Golang IT Длиннопост Текст Слайсы
0
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии