go 的反射

package main

import (
    "reflect"
    "fmt"
)
/**
todo 关键点  elem()
 */


func main(){
    //通过反射修改值

    num:= 133
    reflectModify(&num)  //地址 &  ptr =》 指针
    fmt.Println(num)



    //类似的理解
    num3:=123
    var num4 *int = &num3
    fmt.Println(*num4)
}

func reflectModify(b interface{}){

    rVal:=reflect.ValueOf(b)

    fmt.Println(rVal.Kind())
    fmt.Println(rVal.Type())


    //rVal是个ptr指针   要转成值类型   理解成  取值  类似于  *取值
    rVal.Elem().SetInt(155)
    //rVal.SetInt(155)   todo wrong






}

您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站大部分内容收集于互联网,如果有侵权内容、不妥之处,请联系删除。敬请谅解!

  Previous post HTTPS 工作原理
Next post   go chan归并的核心代码

添加新评论

  关于博主【WANG-FEiHU】

Duplicate
-----------Complicate
--------------------------Appreciate
-----------------------------------------Fate

闻先后,术专攻
三人有师
习得文武艺,货与帝王家
人性不曾变,资本永无眠

-----------花有重开日,人无再少年-----------

  分类目录

  monitor(TD)

不放弃

不怕万人阻挡,只怕自己投降。

人家的时间都用在了努力,而你的时间却用在了选择,当你将放弃当作一种习惯,你一辈子也不会有出息。

知其所以然

鲜衣怒马,绝代风华。 we are the world

Je le sais continue c'est pas bon,A la fin tu restes pas longtemps