Не существует метода Logger.New()
, только функция log.New()
, которая возвращает значение *log.Logger
:
func New(out io.Writer, prefix string, flag int) *Logger
Сгенерированный go doc преднамеренно перечисляет такие «конструкторские» функции под типом, который они возвращают, чтобы вы могли легко найти их, но эта группировка не делает их методами. log.New()
не имеет приемника, поэтому он не может быть методом, только функцией.
Вы можете использовать log.New()
для получения значения типа *log.Logger
, которое при разыменовании дает значение типа log.Logger
, значение, которое вы встраиваете.
Однако, если что-то передается вам как указатель в первую очередь, это явный признак того, что вы должны работать с ним как указатель (и не следует разыменовывать его). Поэтому я бы вставил *log.Logger
, методы все равно будут продвигаться (потому что у них есть указатель приемника). Вот как вы можете инициализировать свои регистраторы:
type logger struct {
*log.Logger
}
var logError = logger{
Logger: log.New(os.Stderr, "ERROR", log.LstdFlags),
}
var logOut = logger{
Logger: log.New(os.Stdout, "INFO", log.LstdFlags),
}
Хотя, если вы ничего не добавите к своему типу logger
, я не вижу оправдания его существования, вы также можете использовать *log.Logger
.