🔄 Итераторы для пагинации API на Go: эффективная обработка данных
Работа с постраничными API — задача, знакомая каждому, кто пишет на Go. Но вместо того, чтобы тратить время на ручное управление запросами и ответами, можно использовать мощные инструменты стандартной библиотеки Go 1.23.
Итераторы — это способ автоматизировать пагинацию, делая код читаемым и гибким. С итератором вы сможете:
🚀 Обрабатывать данные без лишнего кода: забудьте о ручной обработке страниц, переключениях и урлах.
🔧 Упростить тестирование: используйте мок-объекты для проверки функциональности итератора без реального API.
🛠️ Повысить читаемость и масштабируемость кода: пишите лаконичные и удобные решения для сложных задач.
Если работа с REST API и пагинацией — часть ваших задач, итераторы могут стать тем инструментом, который вы давно искали. Время писать и тестировать код так, чтобы он работал за вас!
Работа с постраничными API — задача, знакомая каждому, кто пишет на Go. Но вместо того, чтобы тратить время на ручное управление запросами и ответами, можно использовать мощные инструменты стандартной библиотеки Go 1.23.
Итераторы — это способ автоматизировать пагинацию, делая код читаемым и гибким. С итератором вы сможете:
🚀 Обрабатывать данные без лишнего кода: забудьте о ручной обработке страниц, переключениях и урлах.
🔧 Упростить тестирование: используйте мок-объекты для проверки функциональности итератора без реального API.
🛠️ Повысить читаемость и масштабируемость кода: пишите лаконичные и удобные решения для сложных задач.
Если работа с REST API и пагинацией — часть ваших задач, итераторы могут стать тем инструментом, который вы давно искали. Время писать и тестировать код так, чтобы он работал за вас!
👍10🤔3🥱3😢2
🔢 iota в Go: магия автоматических констант
❓ Что такое iota?
iota — это встроенный идентификатор в Go, используемый для генерации последовательных числовых значений внутри блока const. Он начинается с 0 и увеличивается на 1 в каждой новой строке.
💡 Когда iota полезен?
1️⃣ Для последовательных значений:
iota автоматически увеличивается на 1, что идеально для создания счётчиков или статусов.
2️⃣ Для битовых флагов:
Используя iota, можно легко генерировать битовые флаги:
3️⃣ Для вычислений:
iota можно использовать для создания сложных последовательностей. Например:
iota — это встроенный идентификатор в Go, используемый для генерации последовательных числовых значений внутри блока const. Он начинается с 0 и увеличивается на 1 в каждой новой строке.
go
const (
A = iota // 0
B // 1
C // 2
)
fmt.Println(A, B, C)
iota автоматически увеличивается на 1, что идеально для создания счётчиков или статусов.
Используя iota, можно легко генерировать битовые флаги:
const (
Read = 1 << iota // 1
Write // 2
Execute // 4
)
fmt.Println(Read, Write, Execute)
iota можно использовать для создания сложных последовательностей. Например:
const (
KB = 1 << (10 * iota) // 1024
MB // 1048576
GB // 1073741824
)
fmt.Println(KB, MB, GB)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34❤🔥8👾1
Курсы от Proglib Academy — это крутой подарок для тех, кто интересуется IT, хочет освоить новую профессию
Почему сертификат на наши курсы — хороший презент:
Сертификат оформляется за пару минут, и даже не нужно ломать голову над упаковкой.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6👍1
🔄 Timeouts в Go: Управление длительными задачами
В разработке на Go часто требуется ограничивать время выполнения задач, чтобы избежать зависаний или ненужной траты ресурсов. Таймауты помогают контролировать выполнение операций, обеспечивая стабильность и отзывчивость приложений.
🤔 Что такое таймаут?
Таймаут позволяет задать время, после которого задача будет прервана, если она не завершилась. Это особенно полезно в случае сетевых запросов, работы с базами данных или сложных вычислений, которые могут зависнуть.
🚀 Как реализовать таймауты в Go?
Go предлагает несколько удобных инструментов для работы с таймаутами. Вот несколько примеров:
1️⃣ Контексты с таймаутом
Контекст позволяет задавать ограничение по времени, которое автоматически завершит задачу при превышении лимита.
Зачем использовать?
Это гибкий способ контролировать выполнение задач с возможностью передать контекст в функции.
2️⃣ Таймауты с time.After
Функция time.After позволяет просто установить ограничение времени для выполнения задачи.
Когда использовать?
Когда нужен быстрый и простой способ контролировать длительные операции.
3️⃣ HTTP-запросы с таймаутом
Для работы с сетевыми запросами Go предоставляет возможность задавать таймаут на уровне HTTP-клиента.
Преимущество:
Контроль времени выполнения сетевых операций без дополнительных инструментов.
📌 Почему это важно?
Избежание зависаний: таймауты предотвращают блокировку программы.
Оптимизация ресурсов: долгие задачи прерываются, освобождая память и процессор.
Улучшение UX: пользователи быстрее получают обратную связь, даже если операция не удалась.
В разработке на Go часто требуется ограничивать время выполнения задач, чтобы избежать зависаний или ненужной траты ресурсов. Таймауты помогают контролировать выполнение операций, обеспечивая стабильность и отзывчивость приложений.
🤔 Что такое таймаут?
Таймаут позволяет задать время, после которого задача будет прервана, если она не завершилась. Это особенно полезно в случае сетевых запросов, работы с базами данных или сложных вычислений, которые могут зависнуть.
🚀 Как реализовать таймауты в Go?
Go предлагает несколько удобных инструментов для работы с таймаутами. Вот несколько примеров:
Контекст позволяет задавать ограничение по времени, которое автоматически завершит задачу при превышении лимита.
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
result := make(chan string)
go func() {
time.Sleep(3 * time.Second) // Долгая операция
result <- "Задача завершена"
}()
select {
case res := <-result:
fmt.Println("Результат:", res)
case <-ctx.Done():
fmt.Println("Таймаут:", ctx.Err())
}
Зачем использовать?
Это гибкий способ контролировать выполнение задач с возможностью передать контекст в функции.
Функция time.After позволяет просто установить ограничение времени для выполнения задачи.
done := make(chan string)
go func() {
time.Sleep(3 * time.Second) // Долгая операция
done <- "Успешно выполнено"
}()
select {
case res := <-done:
fmt.Println(res)
case <-time.After(2 * time.Second):
fmt.Println("Таймаут! Слишком долго")
}
Когда использовать?
Когда нужен быстрый и простой способ контролировать длительные операции.
Для работы с сетевыми запросами Go предоставляет возможность задавать таймаут на уровне HTTP-клиента.
client := http.Client{
Timeout: 2 * time.Second,
}
_, err := client.Get("https://httpstat.us/200?sleep=3000")
if err != nil {
fmt.Println("Ошибка запроса:", err)
} else {
fmt.Println("Запрос выполнен успешно!")
}
Преимущество:
Контроль времени выполнения сетевых операций без дополнительных инструментов.
Избежание зависаний: таймауты предотвращают блокировку программы.
Оптимизация ресурсов: долгие задачи прерываются, освобождая память и процессор.
Улучшение UX: пользователи быстрее получают обратную связь, даже если операция не удалась.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤2
🦑👨💻 Программист в «Игре в кальмара»: каковы твои шансы выжить?
Каждый день укрощаете горутины и собираете микросервисы? 🔧
Проверьте, помогут ли вам Go-скилы и железная логика выжить в «Игре в кальмара»! Один panic без recover может стать фатальным 💀🦑
🎯 Пройти тест
Каждый день укрощаете горутины и собираете микросервисы? 🔧
Проверьте, помогут ли вам Go-скилы и железная логика выжить в «Игре в кальмара»! Один panic без recover может стать фатальным 💀🦑
🎯 Пройти тест
🥱8❤2👍2🌚1
Разработка веб-приложений на Go становится ещё проще с Gowebly — инструментом командной строки, который сочетает мощь Go и современные веб-технологии. Если вы хотите быстро создавать быстрые и удобные веб-приложения, этот инструмент вам точно пригодится!
🚀 Что такое Gowebly?
Gowebly — это CLI для генерации веб-приложений на Go с использованием популярных фреймворков (Fiber, Gin, Echo и других) и интеграции с современными библиотеками для интерфейса, такими как htmx, hyperscript, Alpine.js и CSS-фреймворками (Tailwind CSS, Bootstrap и др.).
🔑 Ключевые возможности
Генерация проектов с Fiber, Gin, Echo, Chi и другими фреймворками.
Быстрая интеграция с htmx, Alpine.js и другими инструментами для создания динамических пользовательских интерфейсов.
Tailwind CSS, Bootstrap, UnoCSS — выбирайте то, что подходит вашему проекту.
Горячая перезагрузка шаблонов позволяет ускорить процесс разработки.
Создавайте прогрессивные веб-приложения, готовые к установке на устройства.
Работает на Linux, macOS, Windows (включая WSL).
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍5😁3🥰1
Композиция в Go: как избежать скрытых проблем с интерфейсами
Композиция — одна из ключевых особенностей Go, позволяющая строить гибкие и переиспользуемые компоненты. Однако сочетание композиции с неявными интерфейсами может привести к неожиданным проблемам. В статье описывается реальная ситуация, где композиция поверх http.ResponseWriter нарушила работу Server-Sent Events (SSE).
Что произошло?
➖ При добавлении кастомного функционала через композицию (встраивание) http.ResponseWriter, автор столкнулся с проблемой: неявные интерфейсы, такие как http.Flusher, перестали поддерживаться.
SSE, зависящие от возможности «сбрасывать» данные (Flush), перестали корректно работать.
Go использует неявные интерфейсы, что обычно упрощает работу с кодом. Однако, при добавлении композиции, встроенный объект теряет автоматически реализуемые интерфейсы, если они явно не указаны в новой структуре.
❓ Проблема с композицией:
Когда вы создаете собственную структуру, добавляя к ней http.ResponseWriter через композицию, интерфейс http.Flusher перестает быть реализованным:
Такой код работает для базовой обработки, но если клиент рассчитывает на интерфейс http.Flusher (например, для Server-Sent Events), он больше не доступен. SSE не будут работать корректно.
💡 Решение проблемы
Чтобы восстановить функциональность, автор явно реализовал недостающие методы в композируемой структуре. Например, был добавлен метод Flush в кастомный объект.
Композиция — одна из ключевых особенностей Go, позволяющая строить гибкие и переиспользуемые компоненты. Однако сочетание композиции с неявными интерфейсами может привести к неожиданным проблемам. В статье описывается реальная ситуация, где композиция поверх http.ResponseWriter нарушила работу Server-Sent Events (SSE).
Что произошло?
SSE, зависящие от возможности «сбрасывать» данные (Flush), перестали корректно работать.
Go использует неявные интерфейсы, что обычно упрощает работу с кодом. Однако, при добавлении композиции, встроенный объект теряет автоматически реализуемые интерфейсы, если они явно не указаны в новой структуре.
Когда вы создаете собственную структуру, добавляя к ней http.ResponseWriter через композицию, интерфейс http.Flusher перестает быть реализованным:
type CustomWriter struct {
http.ResponseWriter
status int
}
func (cw *CustomWriter) WriteHeader(code int) {
cw.status = code
cw.ResponseWriter.WriteHeader(code)
}
Такой код работает для базовой обработки, но если клиент рассчитывает на интерфейс http.Flusher (например, для Server-Sent Events), он больше не доступен. SSE не будут работать корректно.
Чтобы восстановить функциональность, автор явно реализовал недостающие методы в композируемой структуре. Например, был добавлен метод Flush в кастомный объект.
// Реализация метода Flush для поддержки интерфейса http.Flusher
func (cw *CustomWriter) Flush() {
if flusher, ok := cw.ResponseWriter.(http.Flusher); ok {
flusher.Flush()
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👾4👏2
Мы запустили свежий канал, где делимся идеями для дизайна интерфейсов. Всё самое стильное, оригинальное и вдохновляющее теперь в одном месте.
📌 Чем полезен канал?
→ Идеи для дизайна интерфейсов.
→ Анимации, которые можно повторить или адаптировать.
→ Лёгкий способ искать вдохновение перед новым проектом.
👉 Подписывайтесь и вдохновляйтесь: UX in GIF
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍3
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
🤖🎓 SmartClass: как научить AI проверять домашки программистов
Автоматизация рутинных задач — один из главных трендов в IT, но как насчет проверки домашек? Представьте себе систему, которая не только оценивает код студентов, но и помогает им понять свои ошибки, словно опытный наставник. Звучит как фантастика? В статье рассказывается, как проект SmartClass воплощает эту идею в реальность, используя возможности AI. Узнайте, какие технологии лежат в основе, с какими трудностями сталкиваются разработчики и как это меняет обучение программированию.
📎 Подробнее о том, как AI помогает проверять домашние задания
Автоматизация рутинных задач — один из главных трендов в IT, но как насчет проверки домашек? Представьте себе систему, которая не только оценивает код студентов, но и помогает им понять свои ошибки, словно опытный наставник. Звучит как фантастика? В статье рассказывается, как проект SmartClass воплощает эту идею в реальность, используя возможности AI. Узнайте, какие технологии лежат в основе, с какими трудностями сталкиваются разработчики и как это меняет обучение программированию.
📎 Подробнее о том, как AI помогает проверять домашние задания
👾1
В современном мире кибербезопасность играет ключевую роль в разработке программного обеспечения. Уязвимости в коде могут стать причиной серьезных проблем, включая утечку данных, финансовые потери и подрыв доверия пользователей.
Никто не застрахован от появления уязвимостей в сторонних библиотеках или собственном коде. Даже если ваш проект работает стабильно, игнорирование уведомлений о безопасности может привести к катастрофическим последствиям. К примеру, недавно обнаруженные уязвимости в пакетах golang.org/x/net и golang.org/x/crypto стали ярким напоминанием о необходимости регулярного мониторинга безопасности.
Для выявления уязвимостей и управления зависимостями в Go существуют специализированные инструменты. Один из них — govulncheck, который позволяет анализировать зависимости проекта и находить известные уязвимости. Этот инструмент интегрируется с базой данных уязвимостей Go и предоставляет четкие рекомендации по их устранению.
Кроме того, если ваш проект включает Docker-образы, стоит обратить внимание на Docker Scout. Этот инструмент позволяет сканировать образы на наличие уязвимых компонентов и предоставляет подробные отчеты для их устранения.
Если вас заинтересовала тема управления уязвимостями в Go, обратите внимание на полезный гайд, в котором подробно описаны шаги по настройке govulncheck, работе с Docker Scout и обновлению зависимостей. Статья помогает не только понять, как реагировать на уведомления о безопасности, но и делает акцент на необходимости регулярного анализа кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👏1👾1
Обобщения (generics) в Go стали одной из самых обсуждаемых функций языка. Давайте разберёмся, как использовать ограничение constraints.Comparable, чтобы создавать более гибкие и безопасные функции, работающие с любыми типами, поддерживающими сравнение.
constraints.Comparable — это ограничение (constraint) из библиотеки golang.org/x/exp/constraints. Оно позволяет работать только с типами, которые поддерживают операции сравнения (==, !=, <, >, <=, >=), такими как числа, строки или булевы значения.
Пример: поиск минимального значения
// Min находит минимальное значение в срезе
func Min[T constraints.Comparable](slice []T) (T, error) {
if len(slice) == 0 {
var zero T
return zero, fmt.Errorf("пустой срез")
}
min := slice[0]
for _, v := range slice[1:] {
if v < min {
min = v
}
}
return min, nil
}
Теперь её можно использовать с любыми типами, которые можно сравнить
func main() {
ints := []int{4, 2, 8, 1, 5}
minInt, _ := Min(ints)
fmt.Println("Минимум:", minInt)
strings := []string{"apple", "banana", "cherry"}
minString, _ := Min(strings)
fmt.Println("Минимум:", minString)
}
Как это работает?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍6🔥2
🗺 Привычка "срезать углы" при ходьбе – это интуитивное применение алгоритмов?
Так работает жадный алгоритм: вы выбираете наиболее выгодный шаг в каждый момент времени, чтобы минимизировать общий путь. То же самое применяют разработчики, создавая маршруты для такси или доставок.
С нашим курсом «Алгоритмы и структуры данных» вы научитесь решать любые сложные задачи так же эффективно.
🎄Начните свой 2025 со скидкой 35% на все курсы. Это лучшее вложении уходящего года – https://proglib.io/w/014fe6d8
Так работает жадный алгоритм: вы выбираете наиболее выгодный шаг в каждый момент времени, чтобы минимизировать общий путь. То же самое применяют разработчики, создавая маршруты для такси или доставок.
С нашим курсом «Алгоритмы и структуры данных» вы научитесь решать любые сложные задачи так же эффективно.
🎄Начните свой 2025 со скидкой 35% на все курсы. Это лучшее вложении уходящего года – https://proglib.io/w/014fe6d8
👍2
🍎 Визуализация вашего кода в один клик!
❓ GitDiagram — это онлайн-инструмент, который позволяет визуализировать структуру и содержимое репозиториев GitHub в виде интерактивных диаграмм.
⚙️ Основные возможности:
Быстрая визуализация: превращает любой репозиторий GitHub в наглядную диаграмму, облегчая понимание структуры проекта;
Простота использования: достаточно заменить 'hub' на 'diagram' в URL любого репозитория GitHub, чтобы получить его визуализацию.
📎 Попробуйте сами! Введите URL интересующего вас репозитория для мгновенной визуализации!
#новость
❓ GitDiagram — это онлайн-инструмент, который позволяет визуализировать структуру и содержимое репозиториев GitHub в виде интерактивных диаграмм.
⚙️ Основные возможности:
Быстрая визуализация: превращает любой репозиторий GitHub в наглядную диаграмму, облегчая понимание структуры проекта;
Простота использования: достаточно заменить 'hub' на 'diagram' в URL любого репозитория GitHub, чтобы получить его визуализацию.
📎 Попробуйте сами! Введите URL интересующего вас репозитория для мгновенной визуализации!
#новость
❤🔥5👍5😢2❤1🤔1
🏎️ 🎮 Golang на PSP: как язык программирования вышел за пределы серверов!
Что общего между языком Go и портативной консолью PlayStation Portable? На первый взгляд, ничего. Но один разработчик нашёл способ запускать программы на Go на этой культовой консоли! 🚀
💡 Как это возможно?
⚙️ WebAssembly и TinyGo: код на Go компилируется в WebAssembly (WASM) с помощью компилятора TinyGo.
⚙️ Инструменты: WASM преобразуется в C-код с помощью w2c2, а для графики используется библиотека raylib, портированная для PSP.
Зачем это нужно?
📌 Исследование возможностей Go в новых средах.
📌 Вдохновение для ретро-разработчиков и экспериментов с устаревшими устройствами.
📌 Простое хобби для фанатов PSP!
🛠️ Хотите попробовать? Прочитайте статью! Это отличный способ погрузиться в эксперименты с Go и WebAssembly.
Что общего между языком Go и портативной консолью PlayStation Portable? На первый взгляд, ничего. Но один разработчик нашёл способ запускать программы на Go на этой культовой консоли! 🚀
💡 Как это возможно?
⚙️ WebAssembly и TinyGo: код на Go компилируется в WebAssembly (WASM) с помощью компилятора TinyGo.
⚙️ Инструменты: WASM преобразуется в C-код с помощью w2c2, а для графики используется библиотека raylib, портированная для PSP.
Зачем это нужно?
📌 Исследование возможностей Go в новых средах.
📌 Вдохновение для ретро-разработчиков и экспериментов с устаревшими устройствами.
📌 Простое хобби для фанатов PSP!
🛠️ Хотите попробовать? Прочитайте статью! Это отличный способ погрузиться в эксперименты с Go и WebAssembly.
🎉20👍7❤1
🎯 Мини-статья о мьютексе в Go
В статье Линк Мэтью рассказывает, как управлять доступом к общим ресурсам в многопоточности с помощью мьютексов.
Мьютекс (mutual exclusion) гарантирует, что только одна горутина работает с разделяемым ресурсом в каждый момент времени.
В статье наглядно показано:
✅ Что такое мьютекс и как он работает;
✅ Простой пример использования sync.Mutex в Go.
В статье Линк Мэтью рассказывает, как управлять доступом к общим ресурсам в многопоточности с помощью мьютексов.
Мьютекс (mutual exclusion) гарантирует, что только одна горутина работает с разделяемым ресурсом в каждый момент времени.
В статье наглядно показано:
✅ Что такое мьютекс и как он работает;
✅ Простой пример использования sync.Mutex в Go.
👍12❤1🥱1
🐌 Читаемость важнее скорости: зачем писать «медленный» код на Go?
Когда речь заходит о написании кода на Go, многие стремятся к максимальной производительности. Но действительно ли это всегда нужно? Джон Арундел из Bitfield Consulting утверждает обратное: в большинстве случаев читаемость кода важнее его скорости.
❓ Почему не стоит зацикливаться на оптимизации:
➖ Go уже быстр: как компилируемый язык, Go обеспечивает высокую производительность даже без специальных оптимизаций.
➖ Код читается чаще, чем выполняется: поддерживаемость и простота кода экономят время команды в долгосрочной перспективе.
➖ Производительность редко критична: для большинства приложений скорость не является основным узким местом.
❓ Когда оптимизация важна?
Конечно, есть исключения — например, игры, высоконагруженные серверы или системное программное обеспечение, где каждый микросекундный прирост имеет значение. Но в остальных случаях следует отдавать предпочтение читаемости.
❓ Как писать понятный код:
➖ Используйте понятные имена переменных и функций.
➖ Разбивайте сложные функции на простые и логически завершенные.
➖ Документируйте свои решения и используйте комментарии там, где это оправдано.
➖ Не бойтесь жертвовать "чуть-чуть большей производительностью" ради ясности.
#новость
Когда речь заходит о написании кода на Go, многие стремятся к максимальной производительности. Но действительно ли это всегда нужно? Джон Арундел из Bitfield Consulting утверждает обратное: в большинстве случаев читаемость кода важнее его скорости.
Конечно, есть исключения — например, игры, высоконагруженные серверы или системное программное обеспечение, где каждый микросекундный прирост имеет значение. Но в остальных случаях следует отдавать предпочтение читаемости.
#новость
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍8❤3🤔1
💻📈 Итоги года Proglib: 2024 год в цифрах и достижениях
Чем вдохновляются разработчики, чтобы создавать новые проекты на Go? Proglib в этом году вновь стал местом, где инженеры обмениваются опытом, изучают тренды и находят полезные материалы.
✅ Итоги года — это не только цифры, но и история роста сообщества, частью которого можете стать и вы!
Чем вдохновляются разработчики, чтобы создавать новые проекты на Go? Proglib в этом году вновь стал местом, где инженеры обмениваются опытом, изучают тренды и находят полезные материалы.
✅ Итоги года — это не только цифры, но и история роста сообщества, частью которого можете стать и вы!
❤4👍2
🌍✈️ 6 идей, как ускорить поиск работы за рубежом
Статья для тех, кто устал от отказов и безрезультатных поисков. Узнайте секреты, которые помогут вам найти работу за рубежом в разы быстрее!
👉 Читать статью
Статья для тех, кто устал от отказов и безрезультатных поисков. Узнайте секреты, которые помогут вам найти работу за рубежом в разы быстрее!
👉 Читать статью
👍2🌚1
Как проверить, пуст ли интерфейс (interface{}) в Go?
В Go интерфейс считается пустым, только если оба его компонента (динамическое значение и тип) равны nil. Однако есть нюансы, о которых стоит знать.
1️⃣ Прямая проверка с == nil
Если интерфейс действительно пустой (значение и тип nil), проверка if myInterface == nil вернет true.
2️⃣ Проблема с nil и типом
Если интерфейс содержит nil с типом (например, *int), он не будет считаться пустым.
3️⃣ Проверка через reflect
Для точной проверки используйте пакет reflect:
💡 Итог:
➖ Используйте if i == nil для простых случаев.
➖ Для значений nil с типом — добавьте проверку через reflect.
➖ Не забывайте, что интерфейс с типом, но nil-значением, не считается пустым.
В Go интерфейс считается пустым, только если оба его компонента (динамическое значение и тип) равны nil. Однако есть нюансы, о которых стоит знать.
Если интерфейс действительно пустой (значение и тип nil), проверка if myInterface == nil вернет true.
var i interface{}
if i == nil {
fmt.Println("Интерфейс пустой")
}
Если интерфейс содержит nil с типом (например, *int), он не будет считаться пустым.
var i interface{} = (*int)(nil)
if i == nil {
fmt.Println("Пустой") // Не выполнится
} else {
fmt.Println("Не пустой") // Вывод: Не пустой
}
Для точной проверки используйте пакет reflect:
import "reflect"
func isEmptyInterface(i interface{}) bool {
return i == nil || reflect.ValueOf(i).IsZero()
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤3👏2
Бесплатный курс по фулстек-разработке — реальность 🔥
Под Новый год Дед Мороз приносит подарки, а наши подписчики — собственные курсы! Сергей Дмитриев, который занимается коммерческой разработкой уже 15 лет, поделился с нами своим обучением по созданию веб-сервиса с нуля. В курс входит 141 урок, 28 часов видео, исходный код и чат поддержки для участников.
Подробнее о курсе читайте на Хабре или в телеграм-канале Сергея
Под Новый год Дед Мороз приносит подарки, а наши подписчики — собственные курсы! Сергей Дмитриев, который занимается коммерческой разработкой уже 15 лет, поделился с нами своим обучением по созданию веб-сервиса с нуля. В курс входит 141 урок, 28 часов видео, исходный код и чат поддержки для участников.
Подробнее о курсе читайте на Хабре или в телеграм-канале Сергея
👍1