package main
import (
"errors"
"fmt"
)
func divide(a, b int) (int, error) {
if b == 0 {
return 0, errors.New("деление на ноль")
}
return a / b, nil
}
func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println("Ошибка:", err)
} else {
fmt.Println("Результат:", result)
}
}
package main
import "fmt"
func riskyFunction() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Поймана ошибка:", r)
}
}()
fmt.Println("Выполняется riskyFunction...")
panic("Что-то пошло не так!")
fmt.Println("Этот код не будет выполнен")
}
func main() {
fmt.Println("Начало программы")
riskyFunction()
fmt.Println("Конец программы")
}
Механизмы panic и recover следует использовать только в следующих случаях:
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩31🎉24❤19🔥14👍8🥰8👏2
🎯 С завтрашнего дня в канале запускается ежедневная викторина по Golang и базам данных.
Каждый день в канале будут публиковаться опросы по Go и базам данных. После этого в течение дня в ответ на опрос будет появляться пост с подробным разбором темы, чтобы вы могли глубже разобраться в вопросе.
💡 Это отличный способ не только проверить свои знания, но и получить развёрнутое понимание по каждой теме. До завтра!
Каждый день в канале будут публиковаться опросы по Go и базам данных. После этого в течение дня в ответ на опрос будет появляться пост с подробным разбором темы, чтобы вы могли глубже разобраться в вопросе.
💡 Это отличный способ не только проверить свои знания, но и получить развёрнутое понимание по каждой теме. До завтра!
👍35🎉26🤩24🔥14🥰12❤5👏1
День 1️⃣
Сегодня обсудим две важные темы: интерфейсы в Go и команду EXPLAIN ANALYZE в Postgres.
Поехали! 🚀
Сегодня обсудим две важные темы: интерфейсы в Go и команду EXPLAIN ANALYZE в Postgres.
Поехали! 🚀
🤩37🎉28👍13❤2🔥2
❓ Вопрос: Что происходит, когда интерфейс в Go сравнивается с nil?
Anonymous Quiz
32%
Сравнение всегда возвращает true, если интерфейс не был инициализирован
29%
Сравнение возвращает true, только если и тип, и значение интерфейса равны nil
9%
Сравнение возвращает true, если значение интерфейса равно nil, независимо от типа
29%
Сравнение всегда возвращает false, так как интерфейсы нельзя сравнивать с nil
👍43🔥37🎉29❤10🤩7
Рунет умер, но вы держитесь. А у вас как дела?
👍 — да, тоже всё упало
⚡️ — нет, всё работает
👍 — да, тоже всё упало
⚡️ — нет, всё работает
👍47🤩18🎉16❤12🥰6🔥5⚡1👏1
Рунет ожил! Техдолга по сегодняшним постам не будет 🎉
Если у вас тоже всё вернулось в норму, ставьте 👍
Если у вас тоже всё вернулось в норму, ставьте 👍
👍51🤩30🔥20🎉19❤5
Нияз Хадимуллин | Ментор по GO
❓ Вопрос: Что происходит, когда интерфейс в Go сравнивается с nil?
Итак, уважаемые знатоки, внимание, вопрос... Что происходит, когда интерфейс в Go сравнивается с nil?
📊 Лишь 25% проголосовавших в опросе выбрали верный вариант!
⁉️ Правильный ответ: Сравнение возвращает true, только если и тип, и значение интерфейса равны nil.
💡 Почему так?
Интерфейс в Go — это структура, которая состоит из двух компонентов:
1. Указатель на тип (type): Содержит информацию о типе данных, который реализует интерфейс. Например, *MyStruct.
2. Указатель на значение (value): Содержит конкретное значение этого типа. Например, указатель на структуру или nil.
‼️ Таким образом, когда вы сравниваете интерфейс с nil, Go проверяет оба компонента и, если хотя бы один из них не равен nil, интерфейс не считается nil.
📊 Лишь 25% проголосовавших в опросе выбрали верный вариант!
💡 Почему так?
Интерфейс в Go — это структура, которая состоит из двух компонентов:
1. Указатель на тип (type): Содержит информацию о типе данных, который реализует интерфейс. Например, *MyStruct.
2. Указатель на значение (value): Содержит конкретное значение этого типа. Например, указатель на структуру или nil.
package main
import "fmt"
type MyInterface interface {
Method()
}
type MyStruct struct{}
func (m *MyStruct) Method() {
fmt.Println("Oh, hi, Mark!")
}
func main() {
var i MyInterface // интерфейс не инициализирован, поэтому его тип и значение равны nil
fmt.Println(i == nil) // true
var s *MyStruct = nil // указатель на структуру равен nil
i = s // интерфейс содержит тип *MyStruct, значение nil
fmt.Println(i == nil) // false
}
‼️ Таким образом, когда вы сравниваете интерфейс с nil, Go проверяет оба компонента и, если хотя бы один из них не равен nil, интерфейс не считается nil.
👍39🎉26🤩22🔥10❤3🥰1
❓ Вопрос: Что показывает команда EXPLAIN ANALYZE в Postgres, в отличие от EXPLAIN?
Anonymous Quiz
8%
План выполнения запроса
84%
План выполнения и статистику по времени выполнения
8%
Статистику по использованию индексов
0%
Список таблиц, участвующих в запросе
👍40🤩27🎉12❤11🔥10
Нияз Хадимуллин | Ментор по GO
❓ Вопрос: Что показывает команда EXPLAIN ANALYZE в Postgres, в отличие от EXPLAIN?
Итак, уважаемые знатоки, внимание, вопрос... Что показывает команда EXPLAIN ANALYZE в Postgres, в отличие от EXPLAIN?
📊 86% проголосовавших в опросе выбрали верный вариант!
⁉️ Правильный ответ: План выполнения и статистику по времени выполнения.
💡 Почему так?
1. EXPLAIN: Показывает, как Postgres планирует выполнить запрос, включая операции (например, сканирование таблиц, использование индексов) и оценку стоимости. Запрос при этом не выполняется. Например:
Запрос
Вывод
2. EXPLAIN ANALYZE: Выполняет запрос и добавляет фактические данные: время выполнения, количество обработанных строк и другие метрики. Например:
Запрос
Вывод
Важно понимать, хоть EXPLAIN и не выполняет запрос, а только показывает план, EXPLAIN ANALYZE может быть затратным для тяжелых запросов, так как он выполняет их полностью.
‼️ Таким образом, EXPLAIN используется, когда нужно быстро понять, как Postgres планирует выполнить запрос, без затрат на его выполнение. EXPLAIN ANALYZE же используется, когда нужно точно определить узкие места в производительности запроса, особенно для тяжелых запросов.
📊 86% проголосовавших в опросе выбрали верный вариант!
💡 Почему так?
1. EXPLAIN: Показывает, как Postgres планирует выполнить запрос, включая операции (например, сканирование таблиц, использование индексов) и оценку стоимости. Запрос при этом не выполняется. Например:
Запрос
EXPLAIN SELECT * FROM users WHERE age > 34;
Вывод
Seq Scan on users (cost=0.00..16.00 rows=420 width=34)
Filter: (age > 34)
2. EXPLAIN ANALYZE: Выполняет запрос и добавляет фактические данные: время выполнения, количество обработанных строк и другие метрики. Например:
Запрос
EXPLAIN ANALYZE SELECT * FROM users WHERE age > 24;
Вывод
Seq Scan on users (cost=0.00..15.00 rows=500 width=36) (actual time=0.034..0.300 rows=450 loops=1)
Filter: (age > 24)
Rows Removed by Filter: 50
Planning Time: 0.052 ms
Execution Time: 0.322 ms
Важно понимать, хоть EXPLAIN и не выполняет запрос, а только показывает план, EXPLAIN ANALYZE может быть затратным для тяжелых запросов, так как он выполняет их полностью.
‼️ Таким образом, EXPLAIN используется, когда нужно быстро понять, как Postgres планирует выполнить запрос, без затрат на его выполнение. EXPLAIN ANALYZE же используется, когда нужно точно определить узкие места в производительности запроса, особенно для тяжелых запросов.
👍30🤩25🎉15❤13🥰5🔥4👏4
День 2️⃣
На ночь глядя поговорим о WaitGroup в Go и уровнях изоляции транзакций в базах данных.
Сегодня у нас параллельное программирование и надёжность данных, поехали 🚀
На ночь глядя поговорим о WaitGroup в Go и уровнях изоляции транзакций в базах данных.
Сегодня у нас параллельное программирование и надёжность данных, поехали 🚀
🔥32👍25❤20🥰20👏13