Я пишу свой первый код go и пытаюсь убедить себя в том, что я делаю, не так.
В любом случае, здесь проект древовидной структуры.
.
├── helpers
│ └── common.go
├── logger
│ └── util.go
├── logger_example
└── runner.go
Основной файл для просмотра здесь logger/util.go
, который выглядит следующим образом.
package logger
import (
"log"
"os"
)
type Logger struct {
*log.Logger
}
func (l *Logger) Info(v ...interface{}) {
l.SetPrefix("Info: ")
l.Println(v...)
}
func (l *Logger) Error(v ...interface{}) {
l.SetPrefix("Error: ")
l.Println(v...)
}
func (l *Logger) Warn(v ...interface{}) {
l.SetPrefix("Warn: ")
l.Println(v...)
}
func (l *Logger) Debug(v ...interface{}) {
l.SetPrefix("Debug: ")
l.Println(v...)
}
func NewLogger() *Logger {
logger := log.New(os.Stdout, "", log.Ldate|log.Ltime|log.Lshortfile)
return &Logger{logger}
}
Как вы все видите, я просто устанавливаю префикс "INFO | WARN | ERROR | DEBUG"
В пакете main
я благополучно создал экземпляр Logger и VOILA сработал.
Только до тех пор, пока я не решил добавить пакет helpers
, и теперь все выглядит не так, как я хотел.
поскольку экземпляр logger.Logger
создан внутри пакета main
, я должен передать ему ссылку на каждую функцию пакета, где я хочу вызвать оператор logger. (см. пример ниже ..)
// dodly_logger/logger/common.go
package helpers
import "dodly_logger/logger"
func Display(dodlyLogger *logger.Logger) {
dodlyLogger.Info("Inside a helper package")
}
Основной пакет ..
package main
import (
logger "dodly_logger/logger"
helpers "dodly_logger/helpers"
)
func main() {
dodlyLogger := logger.NewLogger()
dodlyLogger.Info("INFO MESSAGE")
dodlyLogger.Error("ERROR MESSAGE")
// Ehh, I have to pass the dodlyLogger ..
helpers.Display(dodlyLogger)
}
Хорошо, теперь я знаю, что мои знания GOLang не полны, поэтому я надеюсь, что люди здесь могут указать мне, как я могу написать это более клинически, когда мне не нужно передавать ссылку logger.Logger
на каждую функцию для который мне нужно войти.