Опять отвечу я :-) (как и на вопрос по ссылке)
Да, вы можете использовать так как написали, сам logrus имеет в себе глобальный логер по умолчанию.
В чём суть передачи логера в параметрах?
Ну...
Мы избавляемся от глобальной переменной.
Передача логера происходит в функцию явно.
Мы можем передавать по разному настроенный логер в одну и ту же функцию.
Для малого приложения без разницы, как будет написано, с глобальными переменными или нет, но вот для большего приложения, поддержка станет сложнее.
UPD. Это пример если логирование всех ошибок приложения в одном стиле производится, но мне интересно у кого-нибудь был проект где требовалось несколько разных логеров?
Я бы не советовал передавать в функцию явно, если бы не натыкался на подводные камни глобалок...
Предположим, у вас есть функция парсинга сайтов и вам вдруг(требования меняются часто в реальных проектах) стало необходимо писать лог в файл по имени сайта, как вы будете это делать с глобальным логером?
С передачей логера по ссылке, это сделать очень просто:
А в случае теста, мы заменим логер в файл, на логер с выводом в консоль.
func main() {
logger := logrus.New()
sites := []string{
"example.com",
"google.com",
}
DoParse(sites, logger)
}
func DoParse(sites []string, logger logrus.FieldLogger) {
for _, site := range sites {
logger.Infof("Start parse site: %s", site)
siteLogger := initLoggerForSite(site)
parseSite(site, siteLogger)
}
}
Или часть приложения логировать в файл, а часть и в файл и на консоль выводить.