Как использовать константу через пакет go - PullRequest
0 голосов
/ 25 июня 2018

Я пишу свой первый код 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 на каждую функцию для который мне нужно войти.

1 Ответ

0 голосов
/ 25 июня 2018

Создайте переменную уровня пакета с помощью 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")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...