💡 Создайте простой кэш в памяти с использованием языка Go
Делитесь своими решениями в комментариях! 👇
Там же можно найти ответ!
Делитесь своими решениями в комментариях! 👇
Там же можно найти ответ!
❓Почему порядок перебора элементов в map случайный?
Anonymous Poll
19%
Go специально перемешивает ключи перед каждым вызовом range
2%
Ключи хранятся в массиве и перемешиваются перед перебором
79%
Элементы хранятся в хэш-таблице, и их порядок зависит от хэш-функции
2%
Это баг, который ещё не исправили
В какой момент Go устанавливает случайный seed для map?
Anonymous Poll
48%
При создании новой map
25%
Один раз при старте программы
19%
Перед каждой итерацией range
10%
При каждом доступе к элементу map
❓Какая проблема возникает при многократных операциях CAS(Compare and Swap), если значение переменной меняется туда и обратно?
Anonymous Poll
14%
Deadlock
18%
Starvation
38%
ABA-проблема
34%
Race condition
❓ Что происходит, если CAS не удаётся выполнить замену значения?
Anonymous Poll
9%
Переменная сбрасывается в ноль
35%
Поток повторяет попытку
29%
Генерируется паника
29%
Узнать ответ
❓В какой версии Go был добавлен модульный подход к управлению зависимостями (go modules)?
Anonymous Poll
15%
1.8
27%
1.14
16%
Посмотреть ответы
18%
1.13
27%
1.11
Что произойдёт, если в тестовой функции не будет вызова t.Error() или t.Fail()?
Anonymous Poll
71%
Тест всегда будет считаться успешным
6%
Тест завершится с ошибкой
5%
Тест завершится с panic
5%
Тест не запустится
15%
Узнать ответ
Какое основное отличие time.Ticker от time.Timer?
Anonymous Poll
7%
time.Ticker срабатывает только один раз, а time.Timer — многократно.
69%
time.Ticker отправляет события в канал с регулярным интервалом, а time.Timer — только один раз
11%
Оба работают одинаково, но у time.Ticker есть дополнительный метод Stop()
15%
Узнать ответ
❓Какой формат данных используется для хранения документов в Elasticsearch?
Anonymous Poll
12%
XML
66%
JSON
11%
CSV
15%
Узнать ответ
❓Как создать строковый флаг с именем name и описанием "Your name"?
Anonymous Poll
32%
flag.String("name", "Your name", "")
9%
flag.String("Your name", "name", "")
29%
flag.String("name", "", "Your name")
5%
flag.String("", "name", "Your name")
27%
Узнать ответ
❓Как проверить в Go указатель ли переменная ?
Anonymous Poll
8%
Использовать оператор * для разыменования переменной
6%
Проверить, равен ли тип переменной *int
49%
Использовать функцию TypeOf()
25%
Использовать встроенную функцию isPointer(x interface{}) bool
18%
Узнать ответ
❓Что такое Dead Letter Queue?
Anonymous Poll
1%
Очередь для сообщений с максимальным приоритетом.
5%
Очередь для сообщений, которые не дошли до ProgLib
76%
Очередь для сообщений, которые не удалось обработать после нескольких попыток.
1%
Очередь для временного хранения данных перед отправкой в БД.
18%
Узнать ответ
❓Какие действия можно выполнить с сообщением в dead letter queue?
Anonymous Poll
6%
1. Переотправить в основную очередь.
5%
2. Уведомить команду об ошибке.
3%
3. Архивировать для аудита.
3%
4. Удалить без следа.
12%
1 и 2
12%
2 и 3
45%
Все ответы
22%
Узнать ответ
Обработка сообщений, которые содержат альбомы (media_group), через telegram api
Одна из задач бота (которого я пишу) - проанализировать сообщение, полученное от пользователя, и в зависимости от контента в нём, встроить клавиатуру с возможными действиями.
В ситуации, когда одно сообщение содержит только текст и/или одно изображение, всё хорошо. Получаем один update, в нём лежат все данные, извлекаем и обрабатываем.
Сложности возникают с обработкой сообщений, которые содержат так называемый альбом (медиа группу). Как пример - сообщение, в котором вложены две и более фотографии.
В этом случае бот получает такие сообщения как бы фрагментами (отдельными update'ами). Например, сообщение, состоящее из двух фотографии, бот получит по API в трёх разных update’ах.
Сложность с тем, чтобы понять:
Когда «долетит» последний "фрагмент", после которого можно приступить к анализу всего сообщения?
Как потом обратиться ко всем фрагментам этого сообщения?
Просматривая такие сообщения с помощью бота Json Dump, я увидел, что у такой «пачки» одинаковое значения поля «media_group_id». Вероятно, это и есть связующий ключ. Но два вышеуказанных вопроса по прежнему актуальны.
Не хотелось бы делать костыли в виде глобальной/статической переменной, в которой я должен запоминать начало получения такого сообщения. К тому же, у меня нет понимания: гарантирует ли API телеграмма, что между "фрагментами" одного сообщения не залетит update от другого события/сообщения.🤷♂️
В общем, буду признателен за любые мысли. Желательно, на языке golang. Но можно и на другом. Мне важно понять подход, как подступиться к этой задаче.
Одна из задач бота (которого я пишу) - проанализировать сообщение, полученное от пользователя, и в зависимости от контента в нём, встроить клавиатуру с возможными действиями.
В ситуации, когда одно сообщение содержит только текст и/или одно изображение, всё хорошо. Получаем один update, в нём лежат все данные, извлекаем и обрабатываем.
Сложности возникают с обработкой сообщений, которые содержат так называемый альбом (медиа группу). Как пример - сообщение, в котором вложены две и более фотографии.
В этом случае бот получает такие сообщения как бы фрагментами (отдельными update'ами). Например, сообщение, состоящее из двух фотографии, бот получит по API в трёх разных update’ах.
Сложность с тем, чтобы понять:
Когда «долетит» последний "фрагмент", после которого можно приступить к анализу всего сообщения?
Как потом обратиться ко всем фрагментам этого сообщения?
Просматривая такие сообщения с помощью бота Json Dump, я увидел, что у такой «пачки» одинаковое значения поля «media_group_id». Вероятно, это и есть связующий ключ. Но два вышеуказанных вопроса по прежнему актуальны.
Не хотелось бы делать костыли в виде глобальной/статической переменной, в которой я должен запоминать начало получения такого сообщения. К тому же, у меня нет понимания: гарантирует ли API телеграмма, что между "фрагментами" одного сообщения не залетит update от другого события/сообщения.🤷♂️
В общем, буду признателен за любые мысли. Желательно, на языке golang. Но можно и на другом. Мне важно понять подход, как подступиться к этой задаче.
❓ Что произойдёт при чтении из закрытого chan struct{}?
Anonymous Poll
18%
nil false
39%
{} false
40%
panic: reading from a closed channel
4%
runtime error
Golang. Вывод суммы в рублях и копейках
Всем привет, только начал изучать go не ругайте сильно. Решил задачку, но думаю что есть более элегантное решение с выводом, подскажите пожалуйста как бы Вы решили ее.
Текст задачи:
Напишите программу, которая считывает строку и выводит ее предполагаемую цену, 1 символ = 23 копейки в следующем формате:
Y коп. - если цена не дотягивает до рубля.
X р. Y коп. - если цена превышает 1 рубль.
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
var praic float64 = 0.23
var samplText string
var result int
fmt.Scan(&samplText)
result = utf8.RuneCountInString(samplText)
var resultRub float64 = float64(result) * praic
var RUB int = int(resultRub)
if resultRub > 1.00 {
fmt.Printf("%d р. %d коп.", int64(RUB), int((resultRub-float64(RUB))*100))
} else {
fmt.Printf("%d коп.", int(resultRub*100))
}
}
Всем привет, только начал изучать go не ругайте сильно. Решил задачку, но думаю что есть более элегантное решение с выводом, подскажите пожалуйста как бы Вы решили ее.
Текст задачи:
Напишите программу, которая считывает строку и выводит ее предполагаемую цену, 1 символ = 23 копейки в следующем формате:
Y коп. - если цена не дотягивает до рубля.
X р. Y коп. - если цена превышает 1 рубль.
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
var praic float64 = 0.23
var samplText string
var result int
fmt.Scan(&samplText)
result = utf8.RuneCountInString(samplText)
var resultRub float64 = float64(result) * praic
var RUB int = int(resultRub)
if resultRub > 1.00 {
fmt.Printf("%d р. %d коп.", int64(RUB), int((resultRub-float64(RUB))*100))
} else {
fmt.Printf("%d коп.", int(resultRub*100))
}
}
❓ Что произойдет, если написать //go:generate перед функцией в коде?
Anonymous Poll
2%
Код не скомпилируется
52%
Go выполнит указанную команду при генерации кода
13%
Go проигнорирует этот комментарий
9%
Это специальный комментарий для работы с интерфейсами
26%
Узнать ответ