Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
408 - Telegram Web
Telegram Web
Эволюция стандартной библиотеки Go с пакетом math/rand/v2

С момента выхода Go 1 в марте 2012 года изменения в стандартной библиотеке были ограничены обещанием совместимости Go. В целом, совместимость оказалась благом для пользователей Go, предоставив стабильную базу для производственных систем, документации, учебных пособий, книг и многого другого. Однако со временем мы осознали ошибки в оригинальных API, которые нельзя исправить без нарушения совместимости; в других случаях изменились лучшие практики и соглашения. Нам нужен план для внесения важных, но несовместимых изменений.

Этот пост в блоге посвящён новому пакету math/rand/v2 в Go 1.22 — первому пакету «v2» в стандартной библиотеке. Он вносит необходимые улучшения в API math/rand, но что ещё важнее, он служит примером того, как мы можем пересматривать другие пакеты стандартной библиотеки по мере возникновения необходимости.

(В Go math/rand и math/rand/v2 — это два разных пакета с разными путями для импорта. Go 1 и все последующие версии включают math/rand; Go 1.22 добавил math/rand/v2. Программа на Go может импортировать либо один из пакетов, либо оба.)

В этом посте обсуждаются конкретные причины изменений в math/rand/v2, а также общие принципы, которые будут руководить созданием новых версий других пакетов.

https://go.dev/blog/randv2

👉 @golang_lib
В чем разница между методами Time.Sub() и Time.Add() пакета time?

В пакете time языка Go методы Time.Sub() и Time.Add() служат для работы с временными значениями, но выполняют разные задачи:

1. Time.Sub():
- Используется для вычисления разницы между двумя временными значениями.
- Принимает другой объект типа Time и возвращает Duration, представляющую время, прошедшее между этими двумя временными значениями.
- Пример использования:

t1 := time.Now()
t2 := t1.Add(2 * time.Hour)
duration := t2.Sub(t1) // возвращает 2 часа


2. Time.Add():
- Используется для добавления определенного временного интервала (типа Duration`) к объекту типа `Time.
- Принимает значение Duration и возвращает новый объект Time, который представляет момент времени, полученный после добавления указанного интервала.
- Пример использования:

t := time.Now()
newTime := t.Add(2 * time.Hour) // возвращает t плюс 2 часа


Таким образом, Time.Sub() используется для нахождения разницы между временными метками, а Time.Add() — для добавления интервала времени к конкретной временной метке.

👉 @golang_lib
📢Что делать, когда процессы «пытаются» одновременно получить доступ к данным без правильной синхронизации?

Это называется «состоянием гонки». О том, как выйти из такого состояния, мы поговорим на открытом онлайн-уроке «Race condition, и как с ним бороться»

📅 Дата и время: 1 ноября, 20:00 МСК
🔗Записаться на урок: https://vk.cc/cDCn10

Вы узнаете:
- О типовых сценариях возникновения состояния гонки
- Как и для чего использовать пакет Symfony Lock
- Как восстанавливать работу с БД после исключений

Будет интересно php-разработчикам

💡Встречаемся в преддверии старта курса «Symfony Framework». Все участники вебинара получат специальную цену на обучение!

➡️Регистрируйтесь прямо сейчас, чтобы не пропустить бесплатный урок: https://vk.cc/cDCn10

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Остаться в живых (keepalive) feat. HTTP/2, Go & gRPC-Go

В этой статье мы разберём известную идею — keepalive в межсервисном взаимодействии, которая спасла уже не одну компанию в трудное время :). Но чтобы добавить интереса, мы разберём, какие проблемы в keepalive принесли современные технологии (ведь что может пойти не так с этой простой идеей?). Поэтому в статье мы рассмотрим механизмы, которые позволяют проверять стабильность соединения между клиентом и сервером в случае, когда обычные TCP keepalive из-за сложности архитектуры не могут определить состояние сервера.

https://habr.com/ru/companies/ozontech/articles/810427/

👉 @golang_lib
PNGify

PNGify — это инструмент командной строки, написанный на Go, который позволяет кодировать текст и файлы в PNG-изображения и декодировать их обратно в исходную форму. Этот подход сочетает обработку текста и изображений, предлагая забавный способ хранения и извлечения данных. Цель этого экспериментального проекта — исследовать креативные возможности.

https://github.com/tofl/PNGify

👉 @golang_lib
Прикладное введение в eBPF с Go

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

Практический гайд с акцентом на практику использования eBPF командой Edge Delta.

https://edgedelta.com/company/blog/applied-introduction-ebpf-go

👉 @golang_lib
This media is not supported in your browser
VIEW IN TELEGRAM
Бесплатное IT-образование в 2024

Отобрали для вас полезные телеграм-каналы, которые помогут освоить программирование и другие IT-направления

Выбирайте нужное и подписывайтесь:

👩‍💻 С/С++: @Cpportal
📱 GitHub: @git_developer
🤓 Книги айти: @portalToIT
👩‍💻 Golang: @juniorGolang
👩‍💻 PHP: @PHPortal
👩‍💻 Моб. разработка: @MobDev
👩‍💻 Java: @Java_Iibrary
👩‍💻 Frontend: @FrontendPortal
⚙️ Backend: @BackendPortal
👩‍💻 Python: @PythonPortal
👩‍💻 C#: @KodBlog
🖥 Базы Данных & SQL: @SQL
👩‍💻 Разработка игр: @GameDevgx
👩‍💻 DevOps: @loose_code
🖥 Data Science: @DataSciencegx
🤔 Хакинг & ИБ: @cybersecinform
🐞 Тестирование: @QAPortal
📱 Маркетинг: @MarketingPortal
🖥 Дизайн: @PortalToDesign

➡️ Сохраняйте себе, чтобы не потерять
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Ntcharts

Это инструмент на Go для построения диаграмм в терминале, таких как гистограммы, линии и временные ряды, с использованием библиотеки Bubble Tea.

https://github.com/NimbleMarkets/ntcharts

👉 @golang_lib
database/sql: плохой, хороший, злой

Многие Golang-разработчики пробовали работать с БД в Go, и у каждого — свои боли. В этой статье поисследуем библиотеку database/sql для работы с абстрактной СУБД и нашу имплементацию database/sql драйвера под СУБД YDB. Рассмотрим трудности эксплуатации при использовании драйвера database/sql на проде. А также расскажем, что мы делали для решения проблем.

Меня зовут Алексей Мясников, я — руководитель Application Team в команде разработки YDB. Я очень люблю git blame за то, что с его помощью можно проследить, как развивалась инженерная мысль с течением времени и немножко побыть в шкуре разработчика той или иной классной штуки. В статье я расскажу, как реализовать драйвер database/sql для распределённой базы данных, такой как YDB, какие проблемы при этом придётся преодолеть и как менялся подход с выходом новых версий Go.

https://habr.com/ru/companies/oleg-bunin/articles/808097/

👉 @golang_lib
Использование пакетов crypto/aes и crypto/cipher в Golang

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

https://aran.dev/posts/using-golang-crypto-aes-and-crypto-cipher-packages/

👉 @golang_lib
Обработка ошибок в Golang. errors.Is(), errors.As(), errors.Unwrap(), пользовательские ошибки и многое другое

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

https://adrianlarion.com/golang-error-handling-demystified-errors-is-errors-as-errors-unwrap-custom-errors-and-more/

👉 @golang_lib
Создаем DNS-резолвер с помощью Golang

В статье Доменико Лучиани описывает, как создать резолвер DNS с использованием Golang. Она охватывает основные аспекты DNS-резолвера, такие как обработка запросов, подключение к серверам DNS и интерпретация ответов. Это руководство предназначено для разработчиков, которые хотят понять и реализовать основные функции DNS в среде Golang.

https://domenicoluciani.com/2024/05/07/create-dns-resolver.html

👉 @golang_lib
Именованием ok считается вредным?

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

Давайте поговорим о названии булевых переменных в Go.

https://www.dolthub.com/blog/2024-05-10-ok-considered-harmful/

👉 @golang_lib
Media is too big
VIEW IN TELEGRAM
Оптимизируем код на Go в 10 раз | Как избежать false sharing в Go

00:00 - Введение
00:17 - Подход с RWMutex
01:40 - Подход с Mutex
02:10 - Подход с Atomic
03:39 - Подход с шардированием
04:36 - Подход с выравниванием при шардировании
05:42 - False sharing
08:13 - Заключение

источник


👉 @golang_lib
Media is too big
VIEW IN TELEGRAM
Секреты внутреннего устройства аллокатора Go

00:00 - Введение
01:49 - Концепция аллокатора
06:09 - Линейный аллокатор
11:22 - Блочный аллокатор
16:21 - Стековый аллокатор
20:18 - Устройство malloc
25:01 - Недостатки malloc
26:55 - Устройство tcmalloc
28:28 - Устройство аллокатора Go
32:55 - Предсказуемая фрагментация памяти
40:33 - Где аллоцируются объекты в Go
51:11 - Почему аллокация на стеке работает быстрее, чем в куче
52:35 - Расширение и уменьшение стека в Go
58:12 - Зачем это все нужно знать (практические примеры)
01:03:37 - Пулы объектов (sync.Pool)
01:06:57 - Арены (memory arenas)
01:14:30 - Аллокатор ОС
01:18:28 - Курс по глубокому Go

источник

👉 @golang_lib
2025/06/16 20:41:53
Back to Top
HTML Embed Code: