Redis — отличный инструмент для улучшения производительности вашего приложения. Если Redis уже настроен, давайте сосредоточимся на интеграции его в ваш Go-проект.
1. Установка библиотеки
Самая простая часть. Команда для установки:
go get github.com/go-redis/redis/v8
2. Инициализация клиента
Чтобы обращаться к Redis нам нужен контекст и инициализированный клиент:
// Создаем контекст, который будет использоваться для всех операций с Redis
var ctx = context.Background()
// Функция для инициализации клиента Redis
func initRedisClient() *redis.Client {
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379", // Адрес Redis сервера
Password: "", // Пароль (если есть)
DB: 0, // Индекс базы данных
})
// Проверим подключение
_, err := client.Ping(ctx).Result()
if err != nil {
log.Fatalf("Не удалось подключиться к Redis: %v", err)
}
return client
}
3. Пишем функции
Теперь мы готовы записывать и читать значения.
Функция для записи:
func setKey(client *redis.Client, key, value string) {
err := client.Set(ctx, key, value, 0).Err() // 0 означает, что ключ будет храниться в Redis бесконечно
if err != nil {
log.Fatalf("Ошибка при записи в Redis: %v", err)
}
fmt.Println("Ключ успешно записан в Redis")
}
В функции
setKey()
мы записываем значение в Redis. Мы используем метод Set(), который принимает три параметра:• key — ключ, который будет использоваться для хранения
• value — значение, которое будет храниться.
• 0 — это время жизни ключа. Если указать 0, ключ будет храниться бесконечно.
Функция для чтения:
func getKey(client *redis.Client, key string) string {
val, err := client.Get(ctx, key).Result()
if err == redis.Nil {
fmt.Println("Ключ не найден")
return ""
} else if err != nil {
log.Fatalf("Ошибка при чтении из Redis: %v", err)
}
return val
}
Здесь мы пытаемся получить значение по ключу с помощью метода
Get()
. Если ключ не найден, Redis вернет ошибку redis.Nil
, и мы корректно обрабатываем этот случай.Это полезная основа, на которой можно строить более сложные системы с кэшированием, хранением сессий и очередями задач.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19😁3❤2
💡 Чего мы ждём от обновлений
Go активно развивается и курс этого развития зависит от сообщества. Давайте поделимся какие фичи ждём в следующем обновлении.
Начнёт наш админ:
🤩 Понравился пост? С вам буст, а с нас больше топового контента!
🐸 Библиотека Go-разработчика #междусобойчик
Go активно развивается и курс этого развития зависит от сообщества. Давайте поделимся какие фичи ждём в следующем обновлении.
Начнёт наш админ:
Я бы хотел полноценные енамки, изначально с другого языка пришёл и привык к свитчам с енамами, это же так удобно! А ещё очень не хватает тернарников. Очень много их использовал, а тут это даже мем, что их нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍4👾1
Мультикурсор это имба для работы с однотипными изменениями в коде. Вместо одинаковых действий выделяете все необходимые места и изменяете всё разом.
Сделали для вас небольшую шпаргалку с хоткеями для VS Code.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🥱5
🛠 Основы работы с переменными в Go
Go — мощный и гибкий язык, но для того, чтобы работать с ним эффективно, важно понимать базовые концепты. В этих карточках мы разjобрали переменные, типы данных и операторы.
➡️ Приоткрыть тайны Go
🐸 Библиотека Go-разработчика #буст
Go — мощный и гибкий язык, но для того, чтобы работать с ним эффективно, важно понимать базовые концепты. В этих карточках мы разjобрали переменные, типы данных и операторы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🥱4😢1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13👍2
♦️ Гадание на мемах
Давайте заглянем в будущее и предскажем, что нас ждет на следующей неделе.
Выберите любой мем и отправляйте в комментарии👇
Все мемы предоставлены нашим каналом с мемами➡️ @itmemlib
🐸 Библиотека Go-разработчика #междусобойчик
Давайте заглянем в будущее и предскажем, что нас ждет на следующей неделе.
Выберите любой мем и отправляйте в комментарии👇
Все мемы предоставлены нашим каналом с мемами
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3😁3👾3👍2
Обзор материалов, которые могли остаться в тени, но имеют значение.
— Реально быстрый обзор нового GC
Вы дольше читаете эту подводку, чем автор видео делает обзор на новый сборщик мусора в го.
— Свежий выпуск Cup o' Go
В новом выпуске подкаста как всегда ведущие ищут и обсуждают новости из мира разработки.
— Go 1.25rc1
Команда Go объявила, что первый кандидат на релиз готов к растерзанию разработчиками. Просят проверить и провести тестирование, в том числе с нагрузками.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Forwarded from Библиотека задач по Go | тесты, код, задания
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Go | тесты, код, задания
Anonymous Quiz
50%
false false false false
20%
true true false false
10%
false false true true
20%
true true true true
🤔10
Go-разработчик — от 300 000 ₽, гибрид (Москва/Екатеринбург)
Junior Golang Developer — до 170 000 ₽, удаленно (Москва)
Tech Lead Golang — до 450 000 ₽, удаленно (Ижевск)
Старший Go-разработчик — от 285 000 ₽, удаленно (Москва)
Junior Golang Developer — от 1 700 $, удалённо.
Бустер — удалённо из дома.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👏1
🛠 Как использовать кафку в Go
Представьте, что у вас в руках инструмент, который позволяет строить крутой обмен сообщениями между сервисами. Представили? Давайте попробуем его применить.
1. Установка
Для начала проверьте, что у вас установлен Go версии 1.15 и выше и введите команду:
Это подтянет для вас либу kafka-go после чего её можно будет использовать в проекте:
2. Используем низкоуровневый коннект
Когда нужно отправить сообщение:
Когда сообщение нужно принять:
3. Используем высокоуровневый Reader
Reader сам следит за смещениями, повторными подключениями и балансировкой в группе:
Если нужно ручное управление, замените
4. Просто пишем с высокоуровневым Writer
Writer сам позаботится о повторных попытках, балансировке и «гладком» завершении:
Бонус: советы по использованию
— всегда
— ловите
— подключайте Prometheus/OpenTelemetry — мониторьте
Запустите пару консьюмеров и продюсеров — и почувствуйте, как работают Kafka и Go.
🐸 Библиотека Go-разработчика #буст
Представьте, что у вас в руках инструмент, который позволяет строить крутой обмен сообщениями между сервисами. Представили? Давайте попробуем его применить.
1. Установка
Для начала проверьте, что у вас установлен Go версии 1.15 и выше и введите команду:
go get github.com/segmentio/kafka-go
Это подтянет для вас либу kafka-go после чего её можно будет использовать в проекте:
import "github.com/segmentio/kafka-go"
2. Используем низкоуровневый коннект
Когда нужно отправить сообщение:
ctx := context.Background()
conn, err := kafka.DialLeader(ctx, "tcp", "localhost:9092", "my-topic", 0)
if err != nil {
log.Fatal(err)
}
defer conn.Close()
// Отправляем два сообщения подряд
conn.SetWriteDeadline(time.Now().Add(10 * time.Second))
_, err = conn.WriteMessages(
kafka.Message{Value: []byte("Первое сообщение")},
kafka.Message{Value: []byte("Второе сообщение")},
)
if err != nil {
log.Fatal(err)
}
Когда сообщение нужно принять:
batch := conn.ReadBatch(10e3, 1e6)
defer batch.Close()
buf := make([]byte, 10e3)
for {
n, err := batch.Read(buf)
if err != nil {
break
}
fmt.Println("→", string(buf[:n]))
}
3. Используем высокоуровневый Reader
Reader сам следит за смещениями, повторными подключениями и балансировкой в группе:
r := kafka.NewReader(kafka.ReaderConfig{
Brokers: []string{"localhost:9092", "localhost:9093"},
GroupID: "example-group",
Topic: "events",
MinBytes: 10e3,
MaxBytes: 10e6,
CommitInterval: time.Second,
})
defer r.Close()
for {
m, err := r.ReadMessage(context.Background())
if err != nil {
log.Println("Завершение чтения:", err)
break
}
fmt.Printf("Получено: ключ=%s, значение=%s, смещение=%d\n", m.Key, m.Value, m.Offset)
}
Если нужно ручное управление, замените
ReadMessage
на FetchMessage
+ CommitMessages
.4. Просто пишем с высокоуровневым Writer
Writer сам позаботится о повторных попытках, балансировке и «гладком» завершении:
w := kafka.NewWriter(kafka.WriterConfig{
Brokers: []string{"localhost:9092", "localhost:9093"},
Topic: "events",
Balancer: &kafka.LeastBytes{},
})
defer w.Close()
messages := []kafka.Message{
{Key: []byte("order123"), Value: []byte(`{"status":"created"}`)},
{Key: []byte("order124"), Value: []byte(`{"status":"paid"}`)},
}
if err := w.WriteMessages(context.Background(), messages...); err != nil {
log.Fatal("Ошибка при записи:", err)
}
Бонус: советы по использованию
— всегда
context.WithTimeout
или WithCancel
— это ваша страховка от «зависаний».— ловите
SIGINT
/SIGTERM
и аккуратно закрывайте Reader и Writer.— подключайте Prometheus/OpenTelemetry — мониторьте
throughput
, задержки и ошибки.Запустите пару консьюмеров и продюсеров — и почувствуйте, как работают Kafka и Go.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍5🥱4🔥2