Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyenaraikan Kaedah Awam Pakej Go?

Bagaimana untuk Menyenaraikan Kaedah Awam Pakej Go?

Barbara Streisand
Barbara Streisandasal
2024-12-06 12:13:14420semak imbas

How to List Public Methods of a Go Package?

Menyenaraikan Kaedah Awam Pakej dalam Go

Soalan:

Bagaimana mungkin untuk menyenaraikan kaedah awam pakej dalam Go? Pertimbangkan struktur kod berikut:

main.go:

package main

func main() {
    // list public methods in here
}

libs/method.go:

package libs

func Result1() {
    fmt.Println("method Result1")
}

func Result2() {
    fmt.Println("method Result2")
}

Jawapan:

Malangnya, Go kekurangan ciri langsung untuk permintaan ini. Apabila pakej diimport, pengkompil boleh mengalih keluar kaedah yang tidak digunakan semasa pengoptimuman. Oleh itu, pengimportan pakej semata-mata tidak menjamin kehadiran semua kaedah.

Alternatif:

Analisis Statik:

Anda boleh menghuraikan kod sumber pakej dan mengekstrak pengisytiharan fungsi menggunakan perpustakaan pantulan Go. Pertimbangkan contoh berikut:

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

func main() {
    fileset := token.NewFileSet()
    packages, err := parser.ParseDir(fileset, "./libs", nil, 0)
    if err != nil {
        fmt.Println("Parsing failed:", err)
        return
    }

    methods := []string{}
    for _, p := range packages {
        // Get all methods in each source file.
        for _, f := range p.Files {
            for _, dec := range f.Decls {
                if fn, ok := dec.(*parser.FuncDecl); ok && fn.Name.IsExported() {
                    methods = append(methods, fn.Name.String())
                }
            }
        }
    }

    fmt.Println("Exported methods in package 'libs':", methods)
}

Nota: Pendekatan ini hanya menyediakan pengisytiharan fungsi, bukan pelaksanaannya.

Refleksi Dinamik:

Sebagai alternatif, anda boleh menggunakan pakej mencerminkan Go pada masa jalan untuk memeriksa kaedah sesuatu nilai. Walau bagaimanapun, ini memerlukan contoh yang dimulakan bagi jenis yang dimaksudkan.

Ingat bahawa pendekatan ini mempunyai had dan mungkin tidak sesuai untuk semua kes penggunaan.

Atas ialah kandungan terperinci Bagaimana untuk Menyenaraikan Kaedah Awam Pakej Go?. 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