在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO/ golang的反射引發(fā)出類型問題;

golang的反射引發(fā)出類型問題;

  1. 今天看the-way-to-go,關(guān)于反射賦值時(shí)候一個(gè)疑問(11.10.2章節(jié))
  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后還能用=賦值,這樣前后類型不一樣為什么不會(huì)出錯(cuò)?

回答
編輯回答
愚念

reflect.ValueOf的返回值是reflect.Value類型, reflect.Value類型是個(gè)普通的struct
源碼在$GOROOT/src/reflect/value.go里面,定義這個(gè)結(jié)構(gòu)用來描述go中所有的

2017年5月21日 03:06
編輯回答
毀了心

v的實(shí)際類型是reflect.Value,不是float64也不是*float64...注意區(qū)別v.(type)和v.Type()

2018年3月18日 11:58