首頁 >後端開發 >Golang >如何在不匯入 Go 套件的情況下檢索所有匯出的類型?

如何在不匯入 Go 套件的情況下檢索所有匯出的類型?

Patricia Arquette
Patricia Arquette原創
2024-12-26 03:11:09444瀏覽

How Can I Retrieve All Exported Types from a Go Package Without Importing It?

如何檢查套件中導出的類型

在 Go 中,可以從套件中匯出類型,以便其他套件可以存取它們。有時,可能需要存取有關這些匯出類型的信息,而不直接匯入包。本文將探討如何使用 go/importer 套件從特定套件匯出所有定義的類型。

問題:

考慮以下演示包:

package demo

type People struct {
    Name string
    Age  uint
}

type UserInfo struct {
    Address  string
    Hobby    []string
    NickNage string
}

在另一個包中,我們如何從演示中檢索所有導出的類型包?

答案:

為了實現這一點,我們可以使用 go/importer 包,它提供了一個用於導入包併內省其內容的 API。操作方法如下:

import (
    "fmt"
    "go/importer"
)

func main() {
    pkg, err := importer.Default().Import("demo")
    if err != nil {
        fmt.Println("error:", err)
        return
    }
    for _, declName := range pkg.Scope().Names() {
        fmt.Println(declName)
    }
}

在這段程式碼中,我們先匯入示範包,然後使用importer.Default().Import("demo") 函式取得代表示範的*Package package.

接下來,我們迭代套件的作用域的名稱,其中包含該套件中所有導出類型的名稱。然後這些名稱將列印到標準輸出。

注意:在 Go Playground 中執行此程式碼時,您可能會遇到錯誤。這是因為 Go Playground 的環境無法從外部來源檢索包元資料。

以上是如何在不匯入 Go 套件的情況下檢索所有匯出的類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn