> Что делать, если нельзя писать логи внутри функции fetch, а можно только в функции main? (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Wildberries
Стек: Go
> Пример ответа
В такой ситуации нужно передавать логирование из main в функцию fetch через параметры или контекст. Самый простой способ - передать логгер как аргумент:
GOfunc fetch(url string, logger *log.Logger) (*http.Response, error) {logger.Printf("Запрос к %s", url)resp, err := http.Get(url)if err != nil {logger.Printf("Ошибка: %v", err)return nil, err}return resp, nil}func main() {logger := log.New(os.Stdout, "FETCH: ", log.LstdFlags)resp, err := fetch("https://example.com", logger)if err != nil {logger.Fatal(err)}defer resp.Body.Close()}
Более продвинутый вариант - использовать контекст с логгером через context.WithValue, но это избыточно для простых случаев. Главное - не создавать глобальный логгер, а явно передавать зависимость.
> Похожие задачи по Go
Как организовать прослушивание канала в отдельной горутине, чтобы избежать блокировок?
Что происходит с горутиной, если она пытается записать в канал после ошибки?
Как реализовать graceful shutdown в Go?
Почему интерфейсы лучше размещать в месте их применения?
> Похожие задачи по backend
Как организовать прослушивание канала в отдельной горутине, чтобы избежать блокировок?
Что происходит с горутиной, если она пытается записать в канал после ошибки?
Как реализовать graceful shutdown в Go?
Почему интерфейсы лучше размещать в месте их применения?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью