Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mendapatkan Tandatangan Go Function sebagai Rentetan?
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!