Это два способа создания
select {} — горутина блокируется навсегда, for {} — это бесконечный цикл, 🔹 Математика для Data Science
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
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
🔥15👍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
👍1
Собственный формат сериализации
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
👍4❤1
Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.
Также приветствуется фидбек в комментах.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥11❤3👍1🥱1
json.MarshalIndent принимает те же данные, что и Marshal, плюс два строковых параметра
prefix и indent, которые управляют только prefix — строка, которая indent — строка для каждого уровня вложенности: например " " или "\t" Во всех случаях
prefix и indent 🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Если внутри
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
👍3
Порядок полей в JSON формально
Для
struct encoding/json на практике выводит поля в порядке, Для мап порядок ключей в JSON принципиально
🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Функция
runtime.GC() принудительно запускает Она полезна для тестирования или в ситуациях, когда нужно
Переменная окружения
GOGC=off полностью отключает GC не запускается сам, память растет без ограничений, что подходит для
🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
WANTED: GO-ДОПРОСИТЕЛЬ
Обвиняется в глубоком знании планировщика и умении объяснить работу каналов на пальцах. Пора перестать копить знания в приватных чатах — выходи на большую аудиторию.
Приметы:
— профессионально пишет на
— понимает, что на самом деле спрашивают на интервью в бигтех-компаниях;
— обладает талантом методиста и наставника;
— готов монетизировать свой опыт через создание качественного контента.
Условия:
— статус эксперта в Proglib Academy;
— достойная оплата за участие в проектах;
— мощный PR твоего имени в IT-среде.
Признаться во всём
P.S. Твой техлид — Gopher со стажем? Сдай его следствию.
Обвиняется в глубоком знании планировщика и умении объяснить работу каналов на пальцах. Пора перестать копить знания в приватных чатах — выходи на большую аудиторию.
Приметы:
— профессионально пишет на
Golang (знает, чем он отличается от Java и Python);— понимает, что на самом деле спрашивают на интервью в бигтех-компаниях;
— обладает талантом методиста и наставника;
— готов монетизировать свой опыт через создание качественного контента.
Условия:
— статус эксперта в Proglib Academy;
— достойная оплата за участие в проектах;
— мощный PR твоего имени в IT-среде.
Признаться во всём
P.S. Твой техлид — Gopher со стажем? Сдай его следствию.
debug.SetGCPercent используется для динамической настройки порога запуска сборщика мусора во время
SetGCPercent(-1) полностью отключает автоматическую сборку мусоры, это эквивалентно GOGC=off, память растёт без ограничений.🎁 Новогодняя акция: 3 курса по цене 1
🤝 Помощь с выбором курса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2