<dfn id='fpK31Ot6'></dfn>

        <noscript id='fpK31Ot6'></noscript>

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

        0 0 golang
        hellosweet
        hellosweet

        声望值:40 0人

        2019-02-21 15:06:26 提问

        关注 0关注

        收藏 0收藏, 36浏览

        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声望 2019-02-21 16:02

          v的实际类型是reflect.Value,不是float64也不是*float64...注意区别v.(type)和v.Type()
          请先 登录 后评论
        • xyf76声望 2019-02-21 16:02

          reflect.ValueOf的返回值是reflect.Value类型, reflect.Value类型是个普通的struct源码在$GOROOT/src/reflect/value.go里面,定义这个结构用来描述go中所有的值
          请先 登录 后评论

        注册新账号

        悬赏追问
        10
        • 10
        • 20
        • 50
        • 100
        • 200
        • 输入数值
        发布追问