Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menemui Jenis Pakej Secara Dinamik dalam Go?

Bagaimanakah Saya Boleh Menemui Jenis Pakej Secara Dinamik dalam Go?

DDD
Lepaskan: 2024-12-15 12:51:24
asal
723 orang telah melayarinya

How Can I Discover Package Types Dynamically in Go?

Mencari Jenis Pakej Secara Dinamik

Walaupun tiada mekanisme penemuan jenis dalam pakej refleksi, kaedah lain wujud untuk menemui jenis yang dieksport, terutamanya struct , pada masa jalan.

Pergi 1.5 dan Kemudian

Dalam Go 1.5 dan ke atas, jenis dan pakej pengimport boleh membantu dalam tugas ini. Coretan kod berikut menunjukkan proses:

package main

import (
    "fmt"
    "go/importer"
)

func main() {
    pkg, err := importer.Default().Import("time")
    if err != nil {
        fmt.Printf("error: %s\n", err.Error())
        return
    }
    for _, declName := range pkg.Scope().Names() {
        fmt.Println(declName)
    }
}
Salin selepas log masuk

Versi Pra-1.5

Sebelum Pergi 1.5, pakej ast menyediakan satu-satunya pendekatan yang tidak menggodam masalah ini . Dengan menyusun kod sumber, pakej ini boleh mengekstrak maklumat jenis:

package main

import (
    "fmt"
    "go/ast"
    "go/parser"
    "go/token"
)

func main() {
    fset := token.NewFileSet()
    node, err := parser.ParseFile(fset, "time.go", nil, parser.ParseComments)
    if err != nil {
        fmt.Printf("error: %s\n", err.Error())
        return
    }
    ast.Inspect(node, func(n ast.Node) bool {
        if n, ok := n.(*ast.TypeSpec); ok {
            fmt.Println(n.Name.Name)
        }
        return true
    })
}
Salin selepas log masuk

Teknik ini membenarkan penemuan jenis yang dieksport, terutamanya struct, dalam menjalankan pakej Go, membolehkan analisis lanjut dan instantiasi kejadian.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menemui Jenis Pakej Secara Dinamik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan