Что использовать для доступа к реляционной базе данных? Обычный SQL, ORM или генератор кода SQL-first, например sqlc? Почему бы не спросить кого-нибудь, кто использует этот метод в течение многих лет.
👉 Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🥱5
↪️ Communicating Sequential Processes
Не пытайтесь передавать данные между горутинами через shared memory, которая защищена сложным нагромождением мьютексов, склонных к ошибкам. Это быстро приведёт к адским проблемам отладки конкурентного кода.
Вместо этого, пусть горутины используют свою локальную память и обмениваются данными, отправляя значения.
Это работает хорошо... до тех пор, пока вы не решите создать канал мап или канал срезов. Внезапно возникают data races.
🤔 Почему?
Мапы и срезы — это типы данных, которые содержат указатели. Эти указатели ссылаются на места в памяти, где хранятся реальные данные.
И вот в чём подвох:
Go строго передаёт данные по значению (независимо от того, передаются ли данные функции или через канал).
Указатель — это всего лишь значение. На самом деле, указатель — это просто целое число без знака, которое представляет адрес ячейки памяти.
Поэтому, когда Go отправляет мапу или срез через канал, внутренний указатель также копируется. Глубокое клонирование не происходит.
Теперь существуют два указателя в разных горутинах, которые указывают на одно и то же место в памяти. Один в отправляющей горутине, а другой — в принимающей.
TL;DR:
🔸 Никогда не отправляйте через канал ничего, что содержит указатель. Ни мапы, ни срезы, ни структуры с полями-указателями.
🔸 Отправляйте примитивные типы данных, строки (они неизменяемы), структуры с простыми полями-значениями или массивы.
Don't communicate by sharing memory, share memory by communicating.
Не пытайтесь передавать данные между горутинами через shared memory, которая защищена сложным нагромождением мьютексов, склонных к ошибкам. Это быстро приведёт к адским проблемам отладки конкурентного кода.
Вместо этого, пусть горутины используют свою локальную память и обмениваются данными, отправляя значения.
Это работает хорошо... до тех пор, пока вы не решите создать канал мап или канал срезов. Внезапно возникают data races.
Мапы и срезы — это типы данных, которые содержат указатели. Эти указатели ссылаются на места в памяти, где хранятся реальные данные.
И вот в чём подвох:
Go строго передаёт данные по значению (независимо от того, передаются ли данные функции или через канал).
Указатель — это всего лишь значение. На самом деле, указатель — это просто целое число без знака, которое представляет адрес ячейки памяти.
Поэтому, когда Go отправляет мапу или срез через канал, внутренний указатель также копируется. Глубокое клонирование не происходит.
Теперь существуют два указателя в разных горутинах, которые указывают на одно и то же место в памяти. Один в отправляющей горутине, а другой — в принимающей.
TL;DR:
🔸 Никогда не отправляйте через канал ничего, что содержит указатель. Ни мапы, ни срезы, ни структуры с полями-указателями.
🔸 Отправляйте примитивные типы данных, строки (они неизменяемы), структуры с простыми полями-значениями или массивы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🤩6🌚2❤1😁1
Buffer
— это буфер с переменным размером, который может быть использован для чтения и записи данных. При инициализации буфера с нулевым значением, он будет пустым и готовым к использованию.Поля структуры
Buffer
в Go используются для управления внутренним состоянием буфера при чтении и записи данных.🔗 Читать подробнее о внутреннем строении буфера
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤1
Forwarded from Библиотека тестировщика | QA, тестирование, quality assurance, manual testing, autotesting, ручное тестирование, автотесты
🚩 Как понять, что с компанией точно что-то не так: 11 красных флагов на собеседовании
В этой статье мы расскажем о красных флагах, которые могут сигнализировать о серьезных проблемах в компании и помочь вам сделать правильный выбор.
Читать статью
В этой статье мы расскажем о красных флагах, которые могут сигнализировать о серьезных проблемах в компании и помочь вам сделать правильный выбор.
Читать статью
👍4❤3
Какая версия Go используется в вашем текущем рабочем проекте?
Anonymous Poll
2%
Go 1.17 или ниже
2%
Go 1.18
2%
Go 1.19
4%
Go 1.20
16%
Go 1.21
56%
Go 1.22
1%
Другая (напишу в комментарии)
17%
Посмотреть результаты
🌳 Разработка бинарного дерева поиска с помощью SIMD и ассемблера Go
Когда вам нужно немного больше производительности, чем Go обеспечивает естественным образом, или доступ к базовым функциям ЦП, недоступным в Go, одним из способов сделать это является использование языка ассемблера.
👉 Читать гайд
Когда вам нужно немного больше производительности, чем Go обеспечивает естественным образом, или доступ к базовым функциям ЦП, недоступным в Go, одним из способов сделать это является использование языка ассемблера.
👉 Читать гайд
clement-jean.github.io
Binary Search Tree with SIMD
Recently, I've been looking at cache friendly algorithm for common data structures like trees, tries, ... One such algorithm kept coming up to mind and that's why I decided to implement it in Go.
🔥4😢4
🛠 Работа с аренами: почти избавляемся от GC
Тимлид в Т-Банке Максим Горозий разбирается в причинах частого торможения программ на языках с GC и делится опытом управления памятью, медитируя над профайлингом, чтобы все работало быстро.
👉 Читать
Тимлид в Т-Банке Максим Горозий разбирается в причинах частого торможения программ на языках с GC и делится опытом управления памятью, медитируя над профайлингом, чтобы все работало быстро.
👉 Читать
👍18🥱4
Выявляйте узкие места производительности в своих приложениях, профилируя их активность и оптимизируя действия на основе результатов.
👉 Читать гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2🔥2
🏃 Самоучитель по Go для начинающих. Часть 14. Интерфейсы ввода-вывода. Буферизация. Работа с файлами. Пакеты io, bufio, os
В этой статье рассмотрим основные методы ввода-вывода из пакета io, изучим механизм буферизации и его применение в Go, а также разберем, как работать с файлами с помощью пакета os.
👉 Читать гайд
📌 Остальные части в серии:
1. Особенности и сфера применения Go, установка, настройка
2. Ресурсы для изучения Go с нуля
3. Организация кода. Пакеты, импорты, модули. Ввод-вывод текста.
4. Переменные. Типы данных и их преобразования. Основные операторы
5. Условные конструкции if-else и switch-case. Цикл for. Вложенные и бесконечные циклы
6. Функции и аргументы. Области видимости. Рекурсия. Defer
7. Массивы и слайсы. Append и сopy. Пакет slices
8. Строки, руны, байты. Пакет strings. Хеш-таблица (map)
9. Структуры и методы. Интерфейсы. Указатели. Основы ООП
10. Введение в ООП. Наследование, абстракция, полиморфизм, инкапсуляция
11. Обработка ошибок. Паника. Восстановление. Логирование
12. Обобщенное программирование. Дженерики
13. Работа с датой и временем. Пакет time
В этой статье рассмотрим основные методы ввода-вывода из пакета io, изучим механизм буферизации и его применение в Go, а также разберем, как работать с файлами с помощью пакета os.
👉 Читать гайд
📌 Остальные части в серии:
1. Особенности и сфера применения Go, установка, настройка
2. Ресурсы для изучения Go с нуля
3. Организация кода. Пакеты, импорты, модули. Ввод-вывод текста.
4. Переменные. Типы данных и их преобразования. Основные операторы
5. Условные конструкции if-else и switch-case. Цикл for. Вложенные и бесконечные циклы
6. Функции и аргументы. Области видимости. Рекурсия. Defer
7. Массивы и слайсы. Append и сopy. Пакет slices
8. Строки, руны, байты. Пакет strings. Хеш-таблица (map)
9. Структуры и методы. Интерфейсы. Указатели. Основы ООП
10. Введение в ООП. Наследование, абстракция, полиморфизм, инкапсуляция
11. Обработка ошибок. Паника. Восстановление. Логирование
12. Обобщенное программирование. Дженерики
13. Работа с датой и временем. Пакет time
👏6👍5🤔1💯1
⚒️ Инструменты сборки для Go
Если стандартные инструменты сборки не справляются с поставленной задачей, ловите подборку опенсорсных инструментов сборки, которые стоит рассмотреть, включая Mage и Taskfile.
👉 Читать
Если стандартные инструменты сборки не справляются с поставленной задачей, ловите подборку опенсорсных инструментов сборки, которые стоит рассмотреть, включая Mage и Taskfile.
👉 Читать
🥱8👍5😁2
🤯 International Blue Screen Day
Собрали мини-подборку фото и мемов по мотивам сегодняшних событий.
#назлобудня
Собрали мини-подборку фото и мемов по мотивам сегодняшних событий.
#назлобудня
🥰18😁17👍5❤1