Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Mendapatkan Kembali Tandatangan Fungsi Go sebagai Rentetan?

Bagaimanakah Saya Boleh Mendapatkan Kembali Tandatangan Fungsi Go sebagai Rentetan?

Patricia Arquette
Lepaskan: 2024-11-23 00:12:34
asal
1030 orang telah melayarinya

How Can I Retrieve a Go Function's Signature as a String?

Mengambil semula Tandatangan Fungsi sebagai Rentetan dalam Go

In Go, menentukan tandatangan fungsi dengan nama dan tandatangan tertentu dalam pakej utama adalah penting untuk menyediakan mesej ralat bermaklumat sekiranya berlaku percanggahan.

Boleh mencerminkan.Type.String() Dapatkan Tandatangan?

Semasa reflect.Type.String() menawarkan nama jenis (seperti main.ModuleInitFunc) , ia gagal dalam menyediakan tandatangan penuh. Ini amat jelas apabila berurusan dengan nilai fungsi yang telah menamakan jenis.

Membina Tandatangan

Untuk membina tandatangan, kita mesti mengumpulkan maklumat secara manual daripada reflect.Type .

  • Type.In() menyediakan jenis ith parameter.
  • Type.Out() menyediakan jenis ith jenis hasil.

Contoh Pelaksanaan

Di bawah ialah contoh fungsi yang menjana tandatangan fungsi value:

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

    ...

    return buf.String()
}
Salin selepas log masuk

Fungsi ini membina tandatangan dengan mengulangi jenis input dan output dan memasangnya menjadi rentetan yang boleh dibaca manusia.

Menguji Fungsi Tandatangan

Menguji fungsi tandatangan menghasilkan yang berikut keputusan:

fmt.Println(signature(func(i int) error { return nil })) // func (int) error
fmt.Println(signature(myFunc)) // func (int) error
fmt.Println(signature(time.Now)) // func () time.Time
fmt.Println(signature(os.Open)) // func (string) (*os.File, error)
fmt.Println(signature(log.New)) // func (io.Writer, string, int) *log.Logger
fmt.Println(signature("")) // <not a function>
Salin selepas log masuk

Adalah penting untuk ambil perhatian bahawa Go tidak menyediakan akses kepada parameter dan nama jenis hasil, jadi nama tersebut diabaikan daripada tandatangan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Kembali Tandatangan Fungsi Go 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan