Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menemui Semua Jenis yang Dieksport dalam Pakej Go semasa Runtime?

Bagaimanakah Saya Boleh Menemui Semua Jenis yang Dieksport dalam Pakej Go semasa Runtime?

DDD
DDDasal
2025-01-05 21:04:45864semak imbas

How Can I Discover All Exported Types in a Go Package at Runtime?

Kebolehtemuan Pakej Semasa Masa Jalan

Berbeza dengan pakej pantulan, Go tidak mempunyai mekanisme penemuan jenis yang membenarkan pertanyaan semua jenis tanpa mengetahuinya secara eksplisit. Ini menimbulkan persoalan:

Adakah terdapat kaedah alternatif untuk menemui semua jenis yang dieksport (khususnya struktur) dalam pakej Go yang aktif?

Satu penyelesaian teori ialah hipotesis fungsi, "DiscoverTypes," yang mengambil pakej dan mengembalikan semua jenis yang ditemui. Walau bagaimanapun, fungsi ini tidak wujud dalam pakej reflect.

Mencari Penyelesaian

Dalam Go 1.5 dan lebih baru, jenis pakej dan pengimport yang baru diperkenalkan menyediakan cara untuk memeriksa pakej binari dan sumber. Dengan menggunakan kod berikut, anda boleh menemui semua jenis yang dieksport dalam pakej:

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)
    }
}

Walau bagaimanapun, dalam versi sebelum 1.5, satu-satunya pendekatan yang boleh dipercayai melibatkan penggunaan pakej ast untuk menyusun kod sumber.

Kes Penggunaan Dunia Sebenar

Keupayaan ini amat berguna dalam penjanaan kod utiliti yang mengenal pasti dan membuat instantiat jenis yang memenuhi kriteria tertentu. Utiliti ini membantu dalam menjana fungsi ujian berdasarkan jenis yang ditemui dan mengurangkan keperluan untuk langkah penjanaan kod manual.

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

Kenyataan:
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