gpt4 book ai didi

go - 如何跨go包使用常量

转载 作者:数据小太阳 更新时间:2023-10-29 03:36:50 24 4
gpt4 key购买 nike

我正在编写我的第一个 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< 的引用 到我需要记录的每个函数。

最佳答案

使用 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")
}

关于go - 如何跨go包使用常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51015877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com