Heim  >  Artikel  >  Backend-Entwicklung  >  Was bedeutet „Export auf Paketebene“?

Was bedeutet „Export auf Paketebene“?

PHPz
PHPznach vorne
2024-02-05 22:15:081094Durchsuche

Was bedeutet „Export auf Paketebene“?

问题内容

我正在研究这个记录器。这个导入到底意味着什么?

the simplest way to use logrus is simply the package-level exported logger:
package main

import (
  log "github.com/sirupsen/logrus"
)

func main() {
  log.WithFields(log.Fields{
    "animal": "walrus",
  }).Info("A walrus appears")
}

从示例中可以看出,“内置”日志已被上述实现所取代。我找不到任何官方/正式的规格,可能我不知道这个功能是如何调用的。


正确答案


这只是对在包级别直接导出函数这一事实的引用。也就是说,它们不需要任何类型或变量引用来访问这些导出的符号。

..嗯..示例中的示例是 withfields() 函数。

这是在“包级别”导出的,因此引用该函数所需的只是包名称(或别名)。

在本例中,logrus 包已被别名为 log,因此可以简单地调用它导出的 withfields() 函数:

    log.WithFields(/* etc */)

相比之下,示例中的 info() 函数说明了由 logrus 包中的另一种类型导出的符号(在本例中为函数);这里的 info() 函数在 logrus.entry 引用上调用(由 withfields() 函数返回)。

有什么大不了的?

包级导出在go中很常见;一个不导出任何东西的包对任何人都没有多大用处! :)

我不确定它们是否被明确引用为“包级”导出;通常它们只是“导出”或“导出符号”等。

logrus 的情况下特别调用它们,因为包作者使用它来创建一个与 golang 中的标准 log 包“兼容”的包(也使用“包级”导出)。 p>

即如果您将 logrus 别名为 log,则 logrus 提供标准 log 包的超集;这是故意的,以便通过简单地更改进行 log 调用的文件中的导入语句,可以非常快速地将使用 log 包的现有代码转换为 logrus

Das obige ist der detaillierte Inhalt vonWas bedeutet „Export auf Paketebene“?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen