golang的反射引發出類型問題;

0 0 golang
hellosweet
hellosweet

聲望值:40 0人

2018-10-15 15:06:26 提問

關注 0關注

收藏 0收藏, 5093瀏覽

  1. 今天看the-way-to-go,關于反射賦值時候一個疑問(11.10.2章節)
  2. 代碼如下
package main

import (
    "fmt"
    "reflect"
)

func main() {
    var x float64 = 3.14
    v := reflect.ValueOf(x)    
    fmt.Println("settability of v:", v.CanSet())
    fmt.Println("v.type:", v.Type())  //這一行輸出v.type: float64
    v = reflect.ValueOf(&x)
    fmt.Println("type of v:", v.Type()) //這一行輸出type of v: *float64
    fmt.Println("settability of v:", v.CanSet())
    v = v.Elem()
    fmt.Println("the elem of v is:", v)
    fmt.Println("settability of v:", v.CanSet())
    v.SetFloat(3.1415)
    fmt.Println(v.Interface())
    fmt.Println(v)
}

其中 v := reflect.ValueOf(x) 中v的類型是float64,為何在v = reflect.ValueOf(&x)之后v的類型是*float64后還能用=賦值,這樣前后類型不一樣為什么不會出錯?

請先 登錄 后評論

2個回答

  • 00ffgfgf6973聲望 2018-10-15 16:02

    v的實際類型是reflect.Value,不是float64也不是*float64...注意區別v.(type)和v.Type()
    請先 登錄 后評論
  • xyf76聲望 2018-10-15 16:02

    reflect.ValueOf的返回值是reflect.Value類型, reflect.Value類型是個普通的struct源碼在$GOROOT/src/reflect/value.go里面,定義這個結構用來描述go中所有的值
    請先 登錄 后評論

注冊新賬號

懸賞追問
10
  • 10
  • 20
  • 50
  • 100
  • 200
  • 輸入數值
發布追問
加拿大28火车判定方法