Эйч
Эйч
  • Все менторы
Задачи/Go-разработчик/Обёртка с таймаутом и логированием для долгой функции

Обёртка с таймаутом и логированием для долгой функции

Условие задачи

Нужно реализовать обёртку над функцией, которая выполняется непредсказуемо долго и возвращает число. Менять код самой функции нельзя, так как предполагается, что она содержит, например, сетевой запрос. Обёртка должна запускать эту функцию с таймаутом (например, 1 секунда): если функция успела завершиться — возвращаем результат, если нет — возвращаем ошибку. Также необходимо вывести в лог время выполнения вызова. Сигнатуру обёртки разрешено изменять

gopackage main

import (
    "fmt"
    "math/rand"
    "time"
)

func init() {
    rand.Seed(time.Now().UnixNano())
}

// Есть функция, работающая неопределённо долго и возвращающая число.
// Её тело нельзя изменить (представим, что внутри сетевой запрос).
func unpredictableFunc() int64 {
    rnd := rand.Int63n(5000)
    time.Sleep(time.Duration(rnd) * time.Millisecond)
    return rnd
}

// Нужно изменить функцию обёртку, которая будет работать с заданным таймаутом (например, 1 секунду).
// Если "длинная" функция отработала за это время — отлично, возвращаем результат.
// Если нет — возвращаем ошибку. Результат работы в этом случае нам не важен.
// Дополнительно нужно измерить, сколько выполнялась эта функция (просто вывести в лог).
// Сигнатуру функции обёртки менять можно.
func predictableFunc() int64 {
    return unpredictableFunc()
}

func main() {
    fmt.Println("Started")
    fmt.Println(predictableFunc())
}

Профессия

Go-разработчик

Сопроводим до оффера

Умножим шансы на каждом этапе поиска и поможем получить выгодный оффер

Узнать больше

Сервис развития карьеры

Контактыteam@h.careers@hcareers
TelegramVKYouTubeLinkedIn
Профессии
Компания
С чем помогаемОтзывыВопросы и ответыСертификатыВебинарыСтать ментором

Платформа принадлежит ООО "Эйч Карьера"
ИНН 9710095807 ОГРН 1227700077340
Адрес: 127006, город Москва, Старопименовский пер, д. 18 стр. 2, помещ./ком./этаж I/19/2

Copyright © 2020-2025 Сервис развития карьеры Эйч. Все права защищены.

Политика конфиденциальностиПользовательское соглашениеОферта