golang的反射引发出类型问题;

0 0 golang
hellosweet
hellosweet

声望值:40 0人

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

关注 0关注

收藏 0收藏, 45浏览

  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
  • 输入数值
发布追问