zoukankan      html  css  js  c++  java
  • reflect: call of reflect.Value.NumField on ptr Value

    报错代码

    package main
    
    import (
    	"fmt"
    	"reflect"
    )
    // 生命结构体
    type Person struct {
    	Name string
    	Age string
    }
    // 数值类型通过反射利用结构体赋值 //var a string = "zhao" //arr := reflect.ValueOf(&a) //arr.Elem().SetString("ok") //fmt.Println(a) func main() {
         // 声明 结构对象 没有分配内存 只是声明 var per Person
         // 构建反射 类型 *** 重点:在使用反射赋值的 不管是值类型 还是 结构体类型 都需要 使用反射的 地址
        // 再执行代码 之后 会报错:reflect: call of reflect.Value.NumField on ptr Value
        // 是因为 val是地址,我们需要需要地址所对的值,才能调用NumField() 方法。
    	val := reflect.ValueOf(&per)
    	tp := reflect.TypeOf(per)
        
    	for i:=0;i<val.NumField();i++{
    		if tp.Field(i).Name == "Name"{
    			val.Elem().Field(i).SetString("zhao")
    		}
    		if tp.Field(i).Name == "Age"{
    			val.Elem().Field(i).SetString("12")
    		}
    	}
    	fmt.Println("~~~~~~~~~~~~~~~~~~")
    	fmt.Println(per)
    
    }
    

    改正后代码:

    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    type Person struct {
        Name string
        Age string
    }
    //var a string = "zhao"
    //arr := reflect.ValueOf(&a)
    //arr.Elem().SetString("ok")
    //fmt.Println(a)
    func main()  {
        var per Person
        val := reflect.ValueOf(&per)
        //val2 := reflect.ValueOf(&per)
        tp := reflect.TypeOf(per)
    
        for i:=0;i<val.Elem().NumField();i++{
            if tp.Field(i).Name == "Name"{
                val.Elem().Field(i).SetString("zhao")
            }
            if tp.Field(i).Name == "Age"{
                val.Elem().Field(i).SetString("12")
            }
        }
        fmt.Println("~~~~~~~~~~~~~~~~~~")
        fmt.Println(per)
    
    }
    邮箱: 1090055252@qq.com
  • 相关阅读:
    用vue前后端分离项目开发记录
    使用 JavaScript 将网站后台的数据变化实时更新到前端
    怎么使用 JavaScript 将网站后台的数据变化实时更新到前端
    修改el-table滚动条样式
    修改浏览器滚动条样式
    查找和替换img src
    cookie添加删除修改
    如何处理CSS3属性前缀
    PostCSS深入学习: PostCSS和Sass、Stylus或LESS一起使用
    在 CSS 预编译器之后:PostCSS
  • 原文地址:https://www.cnblogs.com/zhaoxianxin/p/13355844.html
Copyright © 2011-2022 走看看