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 .
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() }
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>
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!