Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menyenaraikan Kaedah Awam Secara Program dalam Pakej Go?

Bagaimanakah Saya Boleh Menyenaraikan Kaedah Awam Secara Program dalam Pakej Go?

Susan Sarandon
Susan Sarandonasal
2025-01-05 10:33:46809semak imbas

How Can I Programmatically List Public Methods in a Go Package?

Cara Menyenaraikan Kaedah Awam Pakej dalam Go

Soalan:

Bagaimana bolehkah saya menyenaraikan semua kaedah awam yang terdapat dalam pakej tertentu dalam Pergi?

Masalah:

Pertimbangkan projek berikut struktur:

  • utama.go:

    package main
    
    func main() {
      // List all public methods here.
    }
  • l ibs/method.go:

    package libs
    
    func Result1() {
      fmt.Println("Method Result1")
    }
    
    func Result2() {
      fmt.Println("Method Result2")
    }

Jawapan:

Sementara ia mungkin kelihatan mudah untuk menyenaraikan kaedah awam menggunakan refleksi, malangnya ia tidak boleh dilakukan secara langsung dalam Go. Ini kerana pengkompil mengoptimumkan fungsi yang tidak digunakan dan mengalih keluarnya daripada boleh laku akhir.

Pendekatan Alternatif:

Jika anda perlu menganalisis pengisytiharan fungsi pakej secara statik, anda boleh gunakan pakej go/parser:

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

func main() {
    set := token.NewFileSet()
    packs, err := parser.ParseDir(set, "sub", nil, 0)
    if err != nil {
        fmt.Println("Failed to parse package:", err)
        os.Exit(1)
    }

    funcs := []*ast.FuncDecl{}
    for _, pack := range packs {
        for _, f := range pack.Files {
            for _, d := range f.Decls {
                if fn, isFn := d.(*ast.FuncDecl); isFn {
                    funcs = append(funcs, fn)
                }
            }
        }
    }

    fmt.Printf("All functions: %+v\n", funcs)
}

Pendekatan ini akan memberikan anda senarai pengisytiharan fungsi, walaupun ia tidak boleh dilafazkan. Untuk melaksanakan fungsi ini, anda perlu mencipta fail berasingan dan memanggilnya secara individu.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyenaraikan Kaedah Awam Secara Program dalam 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