Please open Telegram to view this post
VIEW IN TELEGRAM
Мультикурсор это имба для работы с однотипными изменениями в коде. Вместо одинаковых действий выделяете все необходимые места и изменяете всё разом.
Сделали для вас небольшую шпаргалку с хоткеями для VS Code.
Please open Telegram to view this post
VIEW IN TELEGRAM
🛠 Основы работы с переменными в 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
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Обзор материалов, которые могли остаться в тени, но имеют значение.
— Реально быстрый обзор нового GC
Вы дольше читаете эту подводку, чем автор видео делает обзор на новый сборщик мусора в го.
— Свежий выпуск Cup o' Go
В новом выпуске подкаста как всегда ведущие ищут и обсуждают новости из мира разработки.
— Go 1.25rc1
Команда Go объявила, что первый кандидат на релиз готов к растерзанию разработчиками. Просят проверить и провести тестирование, в том числе с нагрузками.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Go | тесты, код, задания
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека задач по Go | тесты, код, задания
❓Что выведет код
Anonymous Quiz
49%
false false false false
21%
true true false false
10%
false false true true
20%
true true true true
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
🛠 Как использовать кафку в 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