Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengurus Cebisan Fungsi dengan Pelbagai Tandatangan dalam Go?
Masalah:
Membuat kepingan fungsi dengan tandatangan yang berbeza-beza di Golang ialah mencabar. Menggunakan coretan kod yang disediakan, pendekatan itu kelihatan agak "godam." Adakah perlu menggunakan hirisan antara muka{} sebagai penyelesaian?
Penyelesaian:
Menggunakan hirisan antara muka{} sememangnya penyelesaian yang sah untuk mencipta hirisan yang mengandungi fungsi dengan tandatangan yang berbeza. Walau bagaimanapun, pendekatan alternatif melibatkan memanfaatkan pantulan untuk menentukan secara dinamik bilangan dan jenis parameter input bagi setiap fungsi.
Berikut ialah contoh kod alternatif yang mempamerkan penggunaan pantulan:
package main import ( "fmt" "reflect" ) func A() { fmt.Println("A") } func B(a int) { fmt.Println("B", a) } func C(a string, b float32) { fmt.Println("C", a, b) } func main() { f := []interface{}{A, B, C} for _, v := range f { fn := reflect.ValueOf(v) fmt.Printf("Function: %v\n", fn.Type()) numArgs := fn.Type().NumIn() fmt.Printf("Number of arguments: %v\n", numArgs) for i := 0; i < numArgs; i++ { argType := fn.Type().In(i) fmt.Printf("Arg %v Type: %v\n", i+1, argType) } fmt.Printf("Calling function using reflection...\n") callArgs := []reflect.Value{} for i := 0; i < numArgs; i++ { switch fn.Type().In(i).Kind() { case reflect.Int: callArgs = append(callArgs, reflect.ValueOf(i+1)) case reflect.String: callArgs = append(callArgs, reflect.ValueOf(fmt.Sprintf("Arg-%v", i+1))) case reflect.Float32: callArgs = append(callArgs, reflect.ValueOf(float32(i+1))) } } fn.Call(callArgs) } }
Pendekatan ini menyediakan akses terus kepada parameter fungsi individu (kedua-dua jenis dan nilai) melalui refleksi, membolehkan pengendalian lebih dinamik bagi kepingan fungsi dengan berbeza tandatangan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengurus Cebisan Fungsi dengan Pelbagai Tandatangan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!