首頁 >後端開發 >Golang >「包級匯出」是什麼意思

「包級匯出」是什麼意思

PHPz
PHPz轉載
2024-02-05 22:15:081145瀏覽

「包級匯出」是什麼意思

問題內容

我正在研究這個記錄器。這個導入到底意味著什麼?

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

以上是「包級匯出」是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除