sync.Once в Go обеспечивает выполнение функции
atomic.Bool и При вызове
Do(f) сначала проверяется o.done.Load() — если флаг f. Это оптимизировано для горячего пути: поле done размещено первым в структуре для минимизации инструкций на amd64/386. Неправильная реализация только с CompareAndSwap привела бы к f первой.Если
done равно false, вызывается doSlow(f): захватывается мьютекс o.m.Lock(), повторно проверяется done, и только тогда выполняется f() с отложенной установкой o.done.Store(true). Это гарантирует, что f запустится f паникует, Do считает задачу выполненной, и будущие вызовы пропускают её.🔹 Основы IT для непрограммистов
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4😁1
В Go выражение
select {} без блоков case — это Такой вызов часто используется для удержания основной горутины живой, чтобы программа
func main() {
go doSomething()
select {}
}🔹 Алгоритмы и структуры данных
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔6👍3❤2😁1
Это два способа создания
select {} — горутина блокируется навсегда, for {} — это бесконечный цикл, 🔹 Математика для Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
errors.Is и errors.As нужны для корректной работы с обёрнутыми ошибками, когда err содержит не просто
Обычное сравнение err == someErr работает только если:
• err указывает
• ошибка
fmt.Errorf("%w", err) или аналогичные механизмы.Как только добавляется контекст
fmt.Errorf("read config: %w", err), внешнее значение меняется, и == уже не срабатывает, хотя внутри всё ещё лежит исходная ошибка.Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
errors.Is разбирает цепочку Функция
errors.Is вызывает Unwrap у ошибки, ==, либо через метод Is, Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
errors.As проходит по цепочке обёрнутых ошибок и пытается найти в ней значение, которое Функция вызывается как
errors.As(err, &target), где target — указатель на *os.PathError.Внутри она разворачивает ошибку
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥2
errors.Is(err, target) — проверяет, errors.As(err, &target) — ищет внутри обёрток ошибку определённого типа и, если находит, Please open Telegram to view this post
VIEW IN TELEGRAM
Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.
Также приветствуется фидбек в комментах.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍4❤3🥱2
json.Marshal и json.MarshalIndent оба кодируют значение в Marshal выдаёт MarshalIndent — 🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Избегай Race Condition в карьере
Пока другие учат только синтаксис Go, ты можешь освоить архитектуру высоконагруженных систем. На собеседованиях в BigTech смотрят не на то, как ты пишешь
Оффер 1 + 2:
Покупаешь один курс (основной), получаешь доступ к трем.
Мастхэв для гофера:
— Архитектуры и шаблоны проектирования;
— Алгоритмы и структуры данных.
Задеплоить знания
Таймаут: 31 декабря.
Ментор здесь: @manager_proglib
Пока другие учат только синтаксис Go, ты можешь освоить архитектуру высоконагруженных систем. На собеседованиях в BigTech смотрят не на то, как ты пишешь
if err != nil, а на то, как ты строишь взаимодействие сервисов.Оффер 1 + 2:
Покупаешь один курс (основной), получаешь доступ к трем.
Мастхэв для гофера:
— Архитектуры и шаблоны проектирования;
— Алгоритмы и структуры данных.
Задеплоить знания
Таймаут: 31 декабря.
Ментор здесь: @manager_proglib
Теги
json:"..." — это подсказки для пакетa encoding/json, как именно Без тегов Go
Name → "Name", UserID → "UserID".Изменение имени поля:
type User struct {
Name string `json:"name"`
Email string `json:"email_address"`
}Полностью скрыть поле
type User struct {
Name string `json:"name"`
Password string `json:"-"`
}Password вообще не появится в JSON.
Пропускать пустые поля
type User struct {
Name string `json:"name"`
Email string `json:"email,omitempty"`
}🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
json.Marshal кодирует в
Теги
json:"..." не делают поле json.Marshal, если оно неэкспортируемое.🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
При маршалинге анонимные структуры разворачиваются в
Конфликт имён без тегов
type A struct {
Name string
}
type B struct {
Name string
}
type C struct {
A
B
}У C два поля Name на одном уровне вложенности, и
json.Marshal не сможет выбрать однозначно: такое поле считается конфликтным и 🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
— Базовые типы
• string → JSON-строка:
"hello" → "hello".• int, uint, float64 и т.п. → JSON-число: 42, 3.14.
• bool → JSON-логическое: true / false.
— Срезы и массивы
• slice/array → JSON-массив:
[]int{1, 2} → [1,2].• Срез строк →
[]string{"a", "b"} → ["a","b"].— Мапы
•
map[string]T → JSON-объект: {"a":1}.Ключи должны быть строками, целыми числами или должны реализовать
TextMarshaler. Для других типов ключей Marshal — Структуры
• struct → JSON-объект с полями:
json:"...".Вложенные и embedded-структуры разворачиваются в соответствующие вложенные объекты/поля.
— nil
• nil интерфейс, nil slice/map/pointer → JSON null, если само значение маршалится напрямую.
При этом nil-срез кодируется как null, а не как
[], если только вы отдельно не инициализируете его пустым.🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
MarshalIndent влияет
🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM
Собственный формат сериализации
json.Marshaler — то есть MarshalJSON() ([]byte, error) у типа. Это нужно, когда стандартное поведение encoding/json
Пример:
func (t MyTime) MarshalJSON() ([]byte, error) {
// хотим формат "YYYY|MM|DD"
s := t.Format("2006|01|02")
return json.Marshal(s)
}🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.
Также приветствуется фидбек в комментах.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥9❤1👍1🥱1
ЭТОТ ПОСТ СПАСЕТ ТВОЙ 👩💻 -СОБЕС
В наше время очень тяжело попасть на собеседование! Поэтому предлагаем вам очень серьезно относиться к ним.
Не упускайте не единое собеседование, готовьтесь к каждому, как к последнему.
Регулярно проверяйте свои hard-skills.
Забирай чек-лист из закрепленного сообщения - 55 вопросов из реальных собесов!
P.S. помимо непосредственно GO, разбираем другие необходимые технологии, про них нельзя забывать!
Помни, что каждое собеседование в 2025 на вес золота!
Реклама. Заимкин Святослав Валерьевич, ИНН 781430725000. Erid 2VtzqvB5FRL
В наше время очень тяжело попасть на собеседование! Поэтому предлагаем вам очень серьезно относиться к ним.
Не упускайте не единое собеседование, готовьтесь к каждому, как к последнему.
Регулярно проверяйте свои hard-skills.
Забирай чек-лист из закрепленного сообщения - 55 вопросов из реальных собесов!
P.S. помимо непосредственно GO, разбираем другие необходимые технологии, про них нельзя забывать!
Помни, что каждое собеседование в 2025 на вес золота!
Реклама. Заимкин Святослав Валерьевич, ИНН 781430725000. Erid 2VtzqvB5FRL
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1🥰1
json.MarshalIndent принимает те же данные, что и Marshal, плюс два строковых параметра
prefix и indent, которые управляют только prefix — строка, которая indent — строка для каждого уровня вложенности: например " " или "\t" Во всех случаях
prefix и indent 🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM
Если внутри
MarshalJSON вызвать json.Marshal на значении того же типа без обёртки, получится Как делать правильно
Нужно маршалить не самого себя, а
MarshalJSON.Пример безопасного варианта:
type User struct {
Name string
}
func (u User) MarshalJSON() ([]byte, error) {
type plain User // alias без методов
return json.Marshal(plain(u))
}🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM