Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengakses Semua Jenis yang Dieksport daripada Pakej Go Tertentu?

Bagaimanakah Saya Boleh Mengakses Semua Jenis yang Dieksport daripada Pakej Go Tertentu?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-13 11:18:15487semak imbas

How Can I Access All Exported Types from a Specific Go Package?

Mengakses Jenis Eksport Merentas Pakej

Dalam Go, jenis yang dieksport boleh diakses oleh pakej lain. Ini membolehkan penggunaan semula dan modulariti dalam reka bentuk kod. Walau bagaimanapun, bagaimana anda boleh mengakses semua jenis eksport yang ditentukan daripada pakej tertentu?

Pertimbangkan contoh berikut:

package demo

type People struct {
    Name string
    Age  uint
}

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

Dalam pakej yang berasingan, katakan,

import "demo"

Daripada pakej lain ini, kami berusaha untuk mendapatkan semula semua jenis yang dieksport yang ditakrifkan dalam pakej demo. Untuk mencapai matlamat ini, kami boleh memanfaatkan pakej go/importer:

package main

import (
    "fmt"

    "golang.org/x/tools/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)
    }
}

Kod ini mengimport pakej demo menggunakan pengimport dan beralih ke atas nama yang ditentukan dalam skopnya. Output yang terhasil akan menyenaraikan semua jenis yang dieksport, dalam kes ini:

People
UserInfo

Walau bagaimanapun, perlu diingat bahawa menggunakan pendekatan ini boleh mengakibatkan ralat pada Go Playground.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Semua Jenis yang Dieksport daripada Pakej Go Tertentu?. 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