我正在编写我的第一个代码,并试图说服自己我在做什么并没有错。
无论如何,这里是树状结构。
.
├── 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语句的since包函数。 (请参见下面的示例。)
// 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
的引用传递给每个人我需要登录的功能。
答案 0 :(得分:0)
使用var
创建一个包级变量。
软件包主要
import (
logger "dodly_logger/logger"
helpers "dodly_logger/helpers"
)
var dlogger logger.Logger
func init() {
dlogger = logger.NewLogger()
}
func main() {
dlogger.Info("Starting Main")
a()
}
func a() {
dlogger.Info("in a")
}