第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 MethodByName().Call() 返回“[<float64 Value>]”?

為什么 MethodByName().Call() 返回“[<float64 Value>]”?

Go
婷婷同學(xué)_ 2022-10-10 15:51:17
我有以下界面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>]
查看完整描述

1 回答

?
江戶川亂折騰

TA貢獻1851條經(jīng)驗 獲得超5個贊

.Call 返回由被調(diào)用方法返回的值切片。您在該接口上的兩個方法都返回一個 float64,所以這正是您在打印中看到的 - 一個包含單個 float64 值的切片。這是因為該方法可以返回多個值。

嘗試做

fmt.Println(reflect.ValueOf(geometry).MethodByName(method.Name).Call(nil)[0])

一切都會開始變得有意義。


查看完整回答
反對 回復(fù) 2022-10-10
  • 1 回答
  • 0 關(guān)注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號