如何在go包中使用常量

时间:2018-06-25 03:19:08

标签: 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语句的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的引用传递给每个人我需要登录的功能。

1 个答案:

答案 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")
}