我有以下界面import ( "fmt" "reflect")type geometry interface { Area() float64 Perimeter() float64}func prettyPrint(geometry geometry) { geometryType := reflect.TypeOf(geometry) fmt.Println(geometryType.Name()) fmt.Printf("\t%+v\n", geometry) for i := 0; i < geometryType.NumMethod(); i++ { method := geometryType.Method(i) fmt.Println(method.Name) fmt.Println(reflect.ValueOf(geometry).MethodByName(method.Name).Call(nil)) }}prettyPrint使用實現(xiàn)的類型調(diào)用時geometry:func main() { circle := circle{radius: 5} prettyPrint(circle)}這是輸出circle {radius:5}Area[<float64 Value>]Perimeter[<float64 Value>]我不太了解該reflect.Call()方法,或者為什么將每個值打印為[<float64 Value>]- 我試圖通過調(diào)用傳入geometry類型的 func 來獲取結(jié)果輸出我試過傳入[]reflect.Value{}而不是nil按照網(wǎng)上各個地方的建議傳遞,但它給出的結(jié)果與上面相同誰能闡明這里到底發(fā)生了什么?我也在其他地方嘗試過這種Invoke方法func Invoke(any interface{}, name string, args ...interface{}) { inputs := make([]reflect.Value, len(args)) for i, _ := range args { inputs[i] = reflect.ValueOf(args[i]) } fmt.Println(reflect.ValueOf(any).MethodByName(name).Call(inputs))}它給出了相同的結(jié)果..Invoke(circle{}, "Area")輸出[<float64 Value>]
為什么 MethodByName().Call() 返回“[<float64 Value>]”?
婷婷同學(xué)_
2022-10-10 15:51:17