ch
Feedback
Golang | Вопросы собесов

Golang | Вопросы собесов

前往频道在 Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

显示更多
4 750
订阅者
无数据24 小时
-97
-3830
吸引订阅者
七月 '26
七月 '26
+40
在0个频道中
六月 '26
+46
在0个频道中
Get PRO
五月 '26
+42
在0个频道中
Get PRO
四月 '26
+62
在0个频道中
Get PRO
三月 '26
+84
在0个频道中
Get PRO
二月 '26
+112
在0个频道中
Get PRO
一月 '26
+129
在0个频道中
Get PRO
十二月 '25
+95
在0个频道中
Get PRO
十一月 '25
+188
在1个频道中
Get PRO
十月 '25
+187
在1个频道中
Get PRO
九月 '25
+120
在0个频道中
Get PRO
八月 '25
+177
在0个频道中
Get PRO
七月 '25
+183
在0个频道中
Get PRO
六月 '25
+153
在0个频道中
Get PRO
五月 '25
+192
在0个频道中
Get PRO
四月 '25
+244
在0个频道中
Get PRO
三月 '25
+352
在2个频道中
Get PRO
二月 '25
+249
在1个频道中
Get PRO
一月 '25
+368
在53个频道中
Get PRO
十二月 '24
+180
在0个频道中
Get PRO
十一月 '24
+150
在0个频道中
Get PRO
十月 '24
+295
在41个频道中
Get PRO
九月 '24
+342
在246个频道中
Get PRO
八月 '24
+134
在0个频道中
Get PRO
七月 '24
+282
在54个频道中
Get PRO
六月 '24
+819
在244个频道中
Get PRO
五月 '24
+886
在189个频道中
Get PRO
四月 '24
+606
在23个频道中
日期
订阅者增长
提及
频道
27 七月+1
26 七月+5
25 七月0
24 七月+1
23 七月+1
22 七月0
21 七月+2
20 七月0
19 七月+1
18 七月0
17 七月+1
16 七月+5
15 七月+2
14 七月+1
13 七月+2
12 七月+2
11 七月+1
10 七月+2
09 七月+3
08 七月0
07 七月+2
06 七月+2
05 七月+1
04 七月0
03 七月+4
02 七月+1
01 七月0
频道帖子
Средства для стирки с выгодой! Скидка 25% на Lenor, Ariel, Tide в Любимой категории Купить #реклама market.yandex.ru О реклам
Средства для стирки с выгодой! Скидка 25% на Lenor, Ariel, Tide в Любимой категории Купить #реклама market.yandex.ru О рекламодателе

2
🤔 Какие бывают способы оптимизации? Оптимизация кода в Go может быть выполнена на нескольких уровнях: 🟠Оптимизация алгоритмов и структур данных Использование более эффективных алгоритмов (например, O(log n) вместо O(n^2)). Выбор подходящих структур данных (например, map вместо срезов для поиска по ключу). 🟠Оптимизация работы с памятью Снижение количества аллокаций (использование sync.Pool, предварительное выделение памяти). Использование []byte вместо string, если требуется частое изменение строки. Минимизация копирования данных, например, передача []byte по ссылке вместо копирования. 🟠Оптимизация работы с горутинами Использование worker pool, чтобы избежать избыточного создания горутин. Ограничение количества параллельных задач (runtime.GOMAXPROCS). Использование каналов правильной ёмкости для минимизации блокировок. 🟠Оптимизация ввода-вывода (I/O) Буферизация (bufio.Reader, bufio.Writer). Использование асинхронных операций при работе с файлами или сетью. Использование io.Pipe() для потоковой обработки данных. 🟠Использование профилирования и анализа производительности pprof для анализа CPU, памяти и блокировок. race detector (-race флаг) для выявления проблем с конкурентным доступом. Инструменты трассировки (trace). 🚩Пример оптимизации работы с памятью Пример неэффективного кода func inefficient() []string { var result []string for i := 0; i < 1000; i++ { result = append(result, fmt.Sprintf("Item %d", i)) // Частые аллокации } return result } Оптимизированный вариант func efficient() []string { result := make([]string, 0, 1000) // Выделяем память заранее for i := 0; i < 1000; i++ { result = append(result, fmt.Sprintf("Item %d", i)) } return result } Ставь 👍 и забирай 📚 Базу знаний
132
3
Яндекс Музыка до 360 дней бесплатно Яндекс Музыка для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в мультиподписке
Яндекс Музыка до 360 дней бесплатно Яндекс Музыка для вас и 3-х ваших близких. Кинопоиск и Яндекс Книги тоже в мультиподписке Плюс. Попробуйте бесплатно❤️ Слушать #реклама 18+ music.yandex.ru О рекламодателе
229
4
🤔 Какие циклы есть в Go? Существует один основной цикл — это цикл for. н может использоваться в различных формах, выполняя функции традиционных циклов while, do-while и классического for. 🚩Формы цикла С тремя выражениями package main import "fmt" func main() { for i := 0; i < 5; i++ { fmt.Println(i) } } Как while package main import "fmt" func main() { i := 0 for i < 5 { fmt.Println(i) i++ } } Бесконечный package main import "fmt" func main() { i := 0 for { if i >= 5 { break } fmt.Println(i) i++ } } С использованием range package main import "fmt" func main() { arr := []int{1, 2, 3, 4, 5} for index, value := range arr { fmt.Printf("Index: %d, Value: %d\n", index, value) } } 🚩Примеры Итерация по массиву arr := [5]int{10, 20, 30, 40, 50} for i := 0; i < len(arr); i++ { fmt.Println(arr[i]) } Итерация по карте m := map[string]int{"a": 1, "b": 2, "c": 3} for key, value := range m { fmt.Printf("Key: %s, Value: %d\n", key, value) } Итерация по строке s := "hello" for index, char := range s { fmt.Printf("Index: %d, Char: %c\n", index, char) } Ставь 👍 и забирай 📚 Базу знаний
173
5
Услуги дата-центра в Москве Размещение и аренда серверного оборудования в дата-центре. 👍 4 современных дата-центра в Москве.
Услуги дата-центра в Москве Размещение и аренда серверного оборудования в дата-центре. 👍 4 современных дата-центра в Москве. 👍 Лицензированный оператор связи. 👍 Индивидуальные конфигурации выделенных серверов под задачи клиента. 👍 Круглосуточная техническая поддержка в Телеграм, без ботов. Узнать цену #реклама 16+ itsoft.ru О рекламодателе
241
6
🤔 Как защититься от ошибки во время конкурентной записи в map? В Go обычный map не потокобезопасен. Если несколько горутин одновременно записывают в map, возникнет ошибка "fatal error: concurrent map writes". Решение: использовать синхронизацию через sync.Mutex, sync.RWMutex или sync.Map. 🚩Использование `sync.Mutex` (мьютекс) Блокируем доступ на запись и чтение через sync.Mutex. package main import ( "fmt" "sync" ) type SafeMap struct { mu sync.Mutex m map[string]int } func (s *SafeMap) Set(key string, value int) { s.mu.Lock() // Блокируем доступ defer s.mu.Unlock() s.m[key] = value } func (s *SafeMap) Get(key string) int { s.mu.Lock() // Блокируем на чтение defer s.mu.Unlock() return s.m[key] } func main() { safeMap := SafeMap{m: make(map[string]int)} var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func(i int) { defer wg.Done() safeMap.Set(fmt.Sprintf("key%d", i), i) }(i) } wg.Wait() fmt.Println("Готово:", safeMap.Get("key5")) // Получаем значение без гонок данных } 🚩Использование `sync.RWMutex` (оптимизация для чтения) sync.RWMutex позволяет нескольким горутинам читать одновременно, но блокирует запись. type SafeMap struct { mu sync.RWMutex m map[string]int } func (s *SafeMap) Set(key string, value int) { s.mu.Lock() // Блокируем только на запись defer s.mu.Unlock() s.m[key] = value } func (s *SafeMap) Get(key string) int { s.mu.RLock() // Разрешаем множественное чтение defer s.mu.RUnlock() return s.m[key] } 🟠Использование `sync.Map` (встроенный потокобезопасный `map`) sync.Map из стандартной библиотеки уже потокобезопасен, но работает немного медленнее обычного map из-за внутренних механизмов. package main import ( "fmt" "sync" ) func main() { var m sync.Map var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func(i int) { defer wg.Done() m.Store(i, i*10) // Потокобезопасная запись }(i) } wg.Wait() val, ok := m.Load(5) // Потокобезопасное чтение if ok { fmt.Println("Значение:", val) } } Использование канала (`chan`) вместо `map` Вместо map можно передавать данные через канал (chan), если логика позволяет. package main import ( "fmt" ) func main() { ch := make(chan map[string]int, 1) ch <- make(map[string]int) go func() { m := <-ch m["key"] = 42 ch <- m }() m := <-ch fmt.Println(m["key"]) // 42 } Ставь 👍 и забирай 📚 Базу знаний
219
7
Kafka на практике: продюсеры, консьюмеры, Docker Хотите увидеть, как реально работает Kafka? 3 августа в 20:00 — вебинар с жи
Kafka на практике: продюсеры, консьюмеры, Docker Хотите увидеть, как реально работает Kafka? 3 августа в 20:00 — вебинар с живыми примерами кода. Поднимем кластер в Docker, создадим топики, напишем продюсеров на Python/Java, настроим консьюмеров с consumer groups. Разберем партиционирование, оффсеты и гарантии доставки. Для backend-разработчиков, DevOps и всех, кто любит практику. Узнать больше #реклама 16+ otus.ru О рекламодателе
322
8
🤔 Как проводить тестирование в Go? Тестирование в Go реализуется с помощью встроенного пакета testing. Тесты пишутся как функции с именами, начинающимися на Test, принимающими параметр *testing.T. Для запуска тестов используется команда go test. Также доступны инструменты для бенчмарков (Benchmark), покрытия кода тестами (-cover) и работы с примерами (Example). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
323
9
Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с пр
Получи грант до 1,35 млн руб. на обучение в магистратуре Хочешь развиваться в сфере ИТ и получить фундаментальные знания с практикой? Поступай в магистратуру Центрального университета! — 4 офлайн программы по востребованным направлениям ИТ — 2 онлайн-программы: машинное обучение и продуктовый менеджмент — 550 грантов до 75% — Вечерние занятия и учеба по выходным — удобно совмещать с работой — Обучение по модели STEM-образования: на стыке науки, технологий и бизнеса — Возможность стажировок и трудоустройства в ведущих компаниях — Государственный диплом за 2 года Магистратура в Центральном университете — это современный подход к образованию, сильный преподавательский состав и актуальные кейсы от индустрии. Оставляй заявку на грант уже сейчас! Зарегистрироваться #реклама 16+ cu.ru О рекламодателе
322
10
🤔 Почему нельзя брать ссылку на значение, хранящееся по ключу в map? Нельзя напрямую взять ссылку на значение, хранящееся по ключу в карте (map), из-за особенностей реализации карт и управления памятью. Рассмотрим подробнее, почему это так. 🚩Причины, почему нельзя брать ссылку на значение в карте 🟠Внутреннее устройство карты (map) Карты реализованы на основе хеш-таблиц. Внутреннее устройство карты предполагает, что значения могут перемещаться в памяти при выполнении операций, таких как добавление или удаление элементов. Хеш-таблица может перераспределять (реорганизовывать) свои внутренние структуры для оптимизации доступа к элементам. Это может происходить, например, когда карта увеличивается в размере. 🟠Потенциальная недействительность ссылок Если бы была возможность брать ссылки на значения, хранящиеся в карте, то при любой операции изменения карты (добавление, удаление элементов) ссылки могли бы становиться недействительными. Это привело бы к потенциально небезопасному поведению программы, так как указатель (ссылка) мог бы указывать на уже несуществующую или перемещенную область памяти. 🚩Демонстрация проблемы Здесь попытка взять ссылку на значение из карты могла бы привести к проблемам package main import "fmt" func main() { m := map[string]int{"a": 1, "b": 2} // Нельзя делать так: // p := &m["a"] // Вместо этого можно работать с копией значения value := m["a"] p := &value fmt.Println("Value:", *p) // 1 // Изменение карты m["c"] = 3 // Ссылка на значение в карте могла бы стать недействительной // fmt.Println("Value after map change:", *p) } 🚩Правильные способы работы со значениями карты Для работы с ними лучше использовать копии значений. Вот несколько способов, как это можно сделать: 🟠Работа с копией значения Получить значение из карты и сохранить его в переменную. value := m["a"] 🟠Изменение значения в карте Если необходимо изменить значение в карте, его нужно сначала извлечь, изменить, а затем снова записать в карту. value := m["a"] value = value + 10 m["a"] = value 🟠Использование указателей в качестве значений В некоторых случаях можно использовать указатели в качестве значений карты, чтобы можно было изменять значения через указатели. package main import "fmt" func main() { m := map[string]*int{"a": new(int), "b": new(int)} *m["a"] = 1 *m["b"] = 2 // Теперь можно брать указатели на значения p := m["a"] fmt.Println("Value:", *p) // 1 // Изменение значения через указатель *p = 42 fmt.Println("Updated Value:", *m["a"]) // 42 } Ставь 👍 и забирай 📚 Базу знаний
281
11
Предзаказ Samsung Galaxy Z серии на сайте МТС! Оформите предзаказ на Samsung Galaxy Z серии с выгодой до 20 000р. и повышенны
Предзаказ Samsung Galaxy Z серии на сайте МТС! Оформите предзаказ на Samsung Galaxy Z серии с выгодой до 20 000р. и повышенным кешбэком 10% на сайте МТС! Рассрочка 0-0-24 Узнать больше #реклама shop.mts.ru О рекламодателе
333
12
🤔 В чем отличия http 1.1 и http 2? Это версии протокола HTTP, каждая из которых имеет свои особенности и улучшения по сравнению с предыдущими версиями. Важные различия между этими версиями включают следующие аспекты: 🚩Мультиплексирование 🟠HTTP/1.1 Поддерживает одновременное открытие нескольких TCP соединений (обычно 6-8), что позволяет загружать несколько ресурсов параллельно. Однако каждое соединение может обрабатывать только один запрос за раз, что приводит к задержкам из-за блокировки очереди (head-of-line blocking). 🟠HTTP/2 Вводит мультиплексирование, позволяющее отправлять множество запросов и ответов асинхронно через одно единственное TCP соединение. Это значительно уменьшает задержки и улучшает производительность при загрузке страниц с большим количеством ресурсов. 🚩Бинарный протокол 🟠HTTP/1.1 Является текстовым протоколом, что означает, что запросы и ответы форматируются в виде читаемого текста. 🟠HTTP/2 Бинарный протокол, который делает передачу данных более эффективной и менее подверженной ошибкам в синтаксическом анализе. Бинарный формат упрощает реализацию парсеров и уменьшает размер передаваемых данных. 🚩Сжатие заголовков 🟠HTTP/1.1 Заголовки передаются без сжатия, что может привести к значительному объему передаваемых данных, особенно если одни и те же заголовки отправляются повторно с каждым запросом. 🟠HTTP/2 Использует механизм сжатия заголовков HPACK, который уменьшает избыточность заголовков, сжимая их перед отправкой. Это особенно эффективно для повторяющихся запросов к одним и тем же серверам. 🚩Приоритизация запросов 🟠HTTP/1.1 Не поддерживает приоритизацию запросов, из-за чего браузеры должны использовать эвристики для управления приоритетами ресурсов. 🟠HTTP/2 Поддерживает явную приоритизацию запросов, позволяя клиенту указывать приоритет обработки ресурсов, что делает загрузку страниц более эффективной. Ставь 👍 и забирай 📚 Базу знаний
377
13
Kaspersky Premium со скидкой до 28% Покупайте Kaspersky Premium со скидкой до 28% и получайте гарантированные ценные подарки
Kaspersky Premium со скидкой до 28% Покупайте Kaspersky Premium со скидкой до 28% и получайте гарантированные ценные подарки от партнёров, а также возможность участовать в розыгрыше путешествия. Узнать больше #реклама 16+ kaspersky.ru О рекламодателе
349
14
🤔 Что делает команда kill в Linux: Команда `kill` в Linux отправляет сигналы процессам. Самым распространенным использованием является отправка сигнала SIGTERM (по умолчанию), который сообщает процессу о необходимости завершения, или SIGKILL, который немедленно прерывает процесс, не позволяя ему корректно завершиться. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
413
15
Дачная дача в Т-Банк Шопе Футболки с огурцами, тыквами, капустой и другие крутые штуки, да еще и с финансовыми пожеланиями. Н
Дачная дача в Т-Банк Шопе Футболки с огурцами, тыквами, капустой и другие крутые штуки, да еще и с финансовыми пожеланиями. Надо брать. Посмотреть каталог Финансовые услуги оказывает: АО "Тинькофф Банк". #реклама tbank.ru О рекламодателе
383
16
🤔 Что такое iota? Это предопределенное идентификатор, используемое для создания последовательностей целочисленных констант. Он применяется в контексте объявления констант и автоматически инкрементируется на единицу с каждым новым значением. Обычно используется для определения множества связанных констант без необходимости вручную назначать каждому элементу значение. 🚩Основные характеристики 🟠Инициализация с нуля Начинает счет с 0 в каждой новой группе констант. 🟠Автоматическое увеличение Каждое последующее использование iota в одной группе констант увеличивает его значение на 1. 🟠Повторное использование При каждом новом объявлении константного блока iota сбрасывается до 0. package main import "fmt" const ( A = iota // 0 B // 1 C // 2 ) func main() { fmt.Println(A) // Вывод: 0 fmt.Println(B) // Вывод: 1 fmt.Println(C) // Вывод: 2 } Использование его для создания битовых флагов package main import "fmt" const ( Flag1 = 1 << iota // 1 << 0 = 1 Flag2 // 1 << 1 = 2 Flag3 // 1 << 2 = 4 Flag4 // 1 << 3 = 8 ) func main() { fmt.Println(Flag1) // Вывод: 1 fmt.Println(Flag2) // Вывод: 2 fmt.Println(Flag3) // Вывод: 4 fmt.Println(Flag4) // Вывод: 8 } Сброс его в новом блоке package main import "fmt" const ( X = iota // 0 Y // 1 ) const ( Z = iota // 0 (новый блок констант, iota сбрасывается) W // 1 ) func main() { fmt.Println(X) // Вывод: 0 fmt.Println(Y) // Вывод: 1 fmt.Println(Z) // Вывод: 0 fmt.Println(W) // Вывод: 1 } 🚩Комплексное использование Можно использовать в выражениях и совместно с другими константами для создания более сложных последовательностей. package main import "fmt" const ( _ = iota // пропускаем 0 KB = 1 << (10 * iota) // 1 << 10 = 1024 MB // 1 << 20 = 1048576 GB // 1 << 30 = 1073741824 ) func main() { fmt.Println("KB:", KB) // Вывод: KB: 1024 fmt.Println("MB:", MB) // Вывод: MB: 1048576 fmt.Println("GB:", GB) // Вывод: GB: 1073741824 } Ставь 👍 и забирай 📚 Базу знаний
375
17
Оплата на сайте с Яндекс Пэй: ниже отказы, выше продажи Клиенты оформляют заказ быстрее: оплата через Яндекс Пэй требует мини
Оплата на сайте с Яндекс Пэй: ниже отказы, выше продажи Клиенты оформляют заказ быстрее: оплата через Яндекс Пэй требует минимум действий. Сохраняйте платёжные данные в аккаунте Яндекса — клиенты платят в один клик. Интегрируйте кнопку оплаты через готовые модули или по API. Снижайте отказы и увеличивайте конверсию. Подключите Яндекс Пэй сейчас! Подать заявку Финансовые услуги оказывает: АО "Яндекс Банк". #реклама 16+ pay.yandex.ru О рекламодателе
311
18
🤔 Как устроена объектоориентированная модель? Объектно-ориентированная модель отличается от традиционных ООП-языков, таких как C# или Java. Нет классов и наследования в привычном понимании. Вместо этого используются структуры (structs) и интерфейсы для реализации основных принципов ООП: инкапсуляции, композиции и полиморфизма. 🚩Концепции 🟠Структуры (Structs) Служат аналогом классов. Они позволяют объединять данные в логически связанные группы. type Person struct { Name string Age int } 🟠Методы Могут быть определены для структур, что позволяет связывать функции с типами. func (p Person) Greet() { fmt.Printf("Hello, my name is %s\n", p.Name) } 🟠Инкапсуляция Достигается через модификаторы доступа на уровне пакета. Поля и методы, начинающиеся с заглавной буквы, экспортируемые (public), остальные — нет (private). type Person struct { name string // неэкспортируемое поле Age int // экспортируемое поле } 🟠Композиция Go не поддерживает классическое наследование. Вместо этого используется композиция для включения функциональности одного типа в другой. type Employee struct { Person Position string } 🟠Интерфейсы Используются для определения поведения. Типы могут реализовывать интерфейсы неявно, просто предоставляя методы, указанные в интерфейсе. type Greeter interface { Greet() } func SayHello(g Greeter) { g.Greet() } type Person struct { Name string } func (p Person) Greet() { fmt.Printf("Hello, my name is %s\n", p.Name) } func main() { p := Person{Name: "John"} SayHello(p) } 🟠Полиморфизм Достигается через интерфейсы. Любой тип, который реализует интерфейс, может быть использован вместо него. type Greeter interface { Greet() } func SayHello(g Greeter) { g.Greet() } type Robot struct { ID string } func (r Robot) Greet() { fmt.Printf("Greetings, I am robot %s\n", r.ID) } func main() { p := Person{Name: "John"} r := Robot{ID: "XJ-9"} SayHello(p) SayHello(r) } Ставь 👍 и забирай 📚 Базу знаний
346
19
RIZALTA RESORT: доходный номер на Алтае от 12 млн ₽ Представьте: вы приезжаете отдыхать на Алтай — и останавливаетесь в собст
RIZALTA RESORT: доходный номер на Алтае от 12 млн ₽ Представьте: вы приезжаете отдыхать на Алтай — и останавливаетесь в собственном номере. А когда вас нет, им управляет профессиональный отельер. RIZALTA RESORT BELOKURIKHA — гостиничный комплекс с бассейнами, оздоровительными и семейными пространствами. ✅ Номера с ремонтом — от 12 млн ₽. ✅ Прогноз окупаемости — 6 лет. ✅ Доход — от 2 млн ₽ в год. Управление — ZONT Hotel Group. Покупка по ФЗ-214, проект финансируется Сбером. Получите презентацию, планировки и персональный расчёт. Узнать больше #реклама rizalta-resort-altay.ru О рекламодателе
292
20
🤔 Что такое Prometheus? Prometheus – это мощная система мониторинга с временными рядами (time series), которая собирает метрики из сервисов, хранит их и позволяет строить графики и отправлять алерты. 🚩Ключевые особенности Prometheus Pull-модель – сам запрашивает метрики у сервисов (в отличие от push-модели, как в StatsD). Формат временных рядов – каждая метрика привязана ко времени и меткам (labels). Язык запросов PromQL – позволяет анализировать и агрегировать метрики. Автодетектирование сервисов – поддержка Kubernetes, Docker, Consul. Хранение данных в базе TSDB (Time Series Database). Гибкая система алертов – интеграция с Alertmanager (уведомления в Slack, Telegram и др.). 🚩Как работает Prometheus? Экспортеры/сервисы предоставляют метрики через HTTP-эндпоинт (/metrics). Prometheus сам запрашивает данные по расписанию. Метрики хранятся в базе TSDB. Можно строить графики в Grafana или запрашивать данные через API. Алерты отправляются в Alertmanager при достижении пороговых значений. 🚩Пример метрик в Go Go-сервис может отдавать метрики через HTTP с помощью prometheus/client_golang package main import ( "net/http" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) // Создаём метрику var httpRequests = prometheus.NewCounter( prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests", }) func main() { // Регистрируем метрику prometheus.MustRegister(httpRequests) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { httpRequests.Inc() // Увеличиваем счётчик при каждом запросе w.Write([]byte("Hello, Prometheus!")) }) // Эндпоинт для сбора метрик http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8080", nil) } Пример запроса в PromQL http_requests_total Ставь 👍 и забирай 📚 Базу знаний
402