Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menemui Semua Jenis yang Dieksport dalam Pakej Go semasa 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!