Bagaimana cara mendapatkan semua tipe yang ditentukan?

package demo

type People struct {
    Name string
    Age  uint
}

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

paket lain:

import "demo"

dalam paket ini, bagaimana saya bisa mengekspor semua tipe dari paket demo?


go
person emitle    schedule 27.12.2013    source sumber
comment
Apa yang ingin Anda capai?   -  person Paul Hankin    schedule 28.12.2013
comment
Jika Anda membutuhkannya secara terprogram, Anda mungkin ingin menggunakan parser seperti jawaban di bawah ini. Jika Anda hanya menginginkannya untuk informasi Anda sendiri, Anda dapat menggunakan perintah go doc atau godoc.org   -  person MatrixFrog    schedule 28.12.2013


Jawaban (4)


Menggunakan go/importer:

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

(catatan, ini mengembalikan kesalahan pada Go Playground).

person 王一帆    schedule 12.08.2019

Go tidak menyimpan daftar master struct, antarmuka, atau variabel pada tingkat paket, jadi sayangnya apa yang Anda minta tidak mungkin dilakukan.

person LinearZoetrope    schedule 27.12.2013

Sial, aku berharap jawaban Jsor salah, tapi aku tidak bisa menemukan cara untuk melakukannya.

Namun semuanya belum hilang: Jika Anda memiliki sumber untuk 'demo', Anda dapat menggunakan paket parser untuk mencari informasi yang Anda perlukan. Tapi sedikit peretasan.

person BraveNewCurrency    schedule 27.12.2013

Apakah Anda berasal dari bahasa skrip? Tampaknya begitu.

Go mempunyai alasan yang bagus untuk menerapkan jangan memasukkan 'keajaiban' ke dalam kode Anda.

Apa yang tampak mudah pada awalnya (memiliki akses ke semua struct, mendaftarkannya secara otomatis di suatu tempat, "menyimpan" pengkodean) akan berakhir dalam mimpi buruk debugging dan pemeliharaan ketika proyek Anda menjadi lebih besar.

Kemudian Anda harus mendokumentasikan dan mencari semua konvensi dan implikasi buruk Anda. Saya tahu apa yang saya bicarakan, karena saya menempuh rute ini beberapa kali dengan ruby ​​​​dan nodejs.

Sebaliknya, jika Anda membuat semuanya eksplisit, Anda akan mendapatkan beberapa fitur, seperti mengganti nama People struct agar kompiler memberi tahu Anda di mana ia digunakan di seluruh basis kode Anda (dan kompiler go lebih cepat dari Anda).

Kemungkinan seperti itu sangat berharga untuk debugging, pengujian, dan pemfaktoran ulang.

Ini juga membuat kode Anda mudah untuk dipikirkan oleh sesama pembuat kode dan diri Anda sendiri beberapa bulan setelah Anda menulisnya.

person metakeule    schedule 06.03.2014
comment
memiliki akses ke semua struct tidak berarti Anda ingin mendaftarkannya secara otomatis. Ada alasan seperti pembuatan kode. - person vimdude; 09.03.2015
comment
@vimdude untuk pembuatan kode, Anda dapat menggunakan parser go untuk mendapatkan semua struct dari sebuah paket dan menggunakan flag go:generate. - person metakeule; 10.03.2015