Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mendapatkan Tandatangan Go Function sebagai Rentetan?

Bagaimana untuk Mendapatkan Tandatangan Go Function sebagai Rentetan?

DDD
DDDasal
2024-11-19 19:14:02777semak imbas

How to Get a Go Function's Signature as a String?

Cara Mendapatkan Tandatangan Fungsi sebagai Rentetan dalam Go

Pertanyaan anda melibatkan pengambilan semula tandatangan, perwakilan rentetan fungsi taip, diberi pembolehubah fungsi.

Pemahaman reflect.Type.String()

Kaedah reflect.Type.String() mengembalikan nama jenis, bukan tandatangan penuh. Apabila nilai fungsi ialah fungsi literal (jenis tanpa nama), ia mencetak tandatangan.

Membina Tandatangan Secara Manual

Untuk mendapatkan semula tandatangan jenis bernama, maklumat daripada pantulan.Jenis diperlukan. Berikut ialah fungsi yang membina tandatangan:

func signature(f interface{}) string {
    t := reflect.TypeOf(f)
    if t.Kind() != reflect.Func {
        return "<not a function>"
    }

    buf := strings.Builder{}
    buf.WriteString("func (")
    for i := 0; i < t.NumIn(); i++ {
        if i > 0 {
            buf.WriteString(", ")
        }
        buf.WriteString(t.In(i).String())
    }
    buf.WriteString(")")
    if numOut := t.NumOut(); numOut > 0 {
        if numOut > 1 {
            buf.WriteString(" (")
        } else {
            buf.WriteString(" ")
        }
        for i := 0; i < t.NumOut(); i++ {
            if i > 0 {
                buf.WriteString(", ")
            }
            buf.WriteString(t.Out(i).String())
        }
        if numOut > 1 {
            buf.WriteString(")")
        }
    }

    return buf.String()
}

Menguji Fungsi

Sampel output fungsi tandatangan:

fmt.Println(signature(func(i int) error { return nil }))
fmt.Println(signature(myFunc))
fmt.Println(signature(time.Now))
fmt.Println(signature(os.Open))
fmt.Println(signature(log.New))
fmt.Println(signature(""))

Output yang dijangkakan :

func (int) error
func (int) error
func () time.Time
func (string) (*os.File, error)
func (io.Writer, string, int) *log.Logger
<not a function>

Nota: Parameter pencetakan dan nama jenis hasil tidak dapat dilakukan kerana kekurangan maklumat yang boleh diakses.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Tandatangan Go Function sebagai Rentetan?. 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