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

Bagaimana untuk Mendapatkan Tandatangan Go Function sebagai Rentetan?

DDD
Lepaskan: 2024-11-19 19:14:02
asal
815 orang telah melayarinya

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()
}
Salin selepas log masuk

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(""))
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan