首页 > 其他分享 >golang的New研究

golang的New研究

时间:2022-12-06 10:23:45浏览次数:37  
标签:reflect Set 研究 ValueOf Elem golang int New type

直接上代码:

package main

import (
	"fmt"
	"reflect"
)

func main() {
	var n = 33
	var pn  = &n
	var ppn = &pn

	// new可以定义不同类型的地址,可以是int/int*/int**,都是可以的,对应的值也是需要正确的

	{
		nNew := reflect.New(reflect.TypeOf(n))
		nNew.Elem().Set(reflect.ValueOf(n))
		//pnew.Elem().Set(reflect.ValueOf(pn))// reflect.Set: value of type *int is not assignable to type int
		//pnew.Elem().Set(reflect.ValueOf(ppn)) // reflect.Set: value of type **int is not assignable to type int
		fmt.Println(nNew)
	}

	{
		pnNew := reflect.New(reflect.TypeOf(pn))
		//pnew.Elem().Set(reflect.ValueOf(n)) // reflect.Set: value of type int is not assignable to type *int
		pnNew.Elem().Set(reflect.ValueOf(pn))
		{
			nNew := reflect.New(reflect.TypeOf(n))
			nNew.Elem().Set(reflect.ValueOf(n))
			pnNew.Elem().Set(nNew)
		}
		//pnew.Elem().Set(reflect.ValueOf(ppn)) // reflect.Set: value of type **int is not assignable to type *int
		fmt.Println(pnNew)
	}


	{
		types := reflect.TypeOf(ppn).String()
		fmt.Println(types)
		ppnNew := reflect.New(reflect.TypeOf(ppn))
		//pnew.Elem().Set(reflect.ValueOf(n)) // reflect.Set: value of type int is not assignable to type **int
		// pnew.Elem().Set(reflect.ValueOf(pn)) // reflect.Set: value of type *int is not assignable to type **int
		ppnNew.Elem().Set(reflect.ValueOf(ppn))
		{
			pnNew := reflect.New(reflect.TypeOf(pn))
			{
				nNew := reflect.New(reflect.TypeOf(n))
				nNew.Elem().Set(reflect.ValueOf(n))
				pnNew.Elem().Set(nNew)
			}
			ppnNew.Elem().Set(pnNew)
		}
		fmt.Println(ppnNew)
	}
}

 

 

reflect.New()后面的类型可以是int/int*/int**, 也就是可以是对象/指针/指针的指针

然后设置值的时候需要一一对应上

标签:reflect,Set,研究,ValueOf,Elem,golang,int,New,type
From: https://www.cnblogs.com/zhanchenjin/p/16954442.html

相关文章

  • 使用 gvm 来快速安装或者升级 golang 版本
    gvm是golang的版本管理工具,有点类似于python的pyenv。一、安装gvmbash<<(curl-s-S-Lhttps://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gv......
  • golang的defer使用一
    先来看例子:例子1:packagemainimport"fmt"funcrefertest()int{variintfmt.Printf("在没有调用defer之前。i的值为:%d,i的地址为:%p",i,&i)fmt.Println()d......
  • jupyter安装后new里没有tensorflow
    明明安装了tensorflow但是没有显示,于是记录一下怎么搞出来因为jupyter默认在base环境中,所以需要在pytorch中配置jupyter。1.打开AnacondaPrompt输入“condalist”查......
  • golang的特殊常量iota
    其实iota这个常量应该是编译器的常量,iota是一个编译器在编译过程中动态赋值。iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明......
  • 易基因课程回顾|表观遗传学和表观育种在品种改良中的应用研究
    大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 传统作物育种包括杂交、选择所需性状的遗传变异,导致遗传基础缩窄和遗传多样性缺失,从而阻碍作物改良。表......
  • Object o = new Object();
    对象的创建过程:1,申请内存,并初始化;2,构造器初始化;3,o指向对象。 对象在内存中的存储布局:  使用jol工具打印java对象在内存的存储布局:  其中,对象头的组成:对......
  • golang的快速排序
    1、什么是快速排序:快速排序是一种分治策略的排序算法,本质上来看,快速排序是对冒泡排序的一种改进,属于交换类的排序算法。是由英国计算机科学家 TonyHoare​ 发明的,该算法......
  • Go-08 Golang中的切片
    packagemainimport"fmt"//Go语言中的切片/* 学习目标 1.为什么要使用切片 2.切片的定义 3.关于nil的认识 4.切片的循环遍历 5.基于数组定义切片 6.切片再切......
  • Golang反射修改变量值
    1.前言前面的随笔Golang反射获取变量类型和值分享了如何通过反射获取变量的类型和值,也就是Golang反射三大定律中的前两个,即从interface{}到反射对象和从反射对象到inter......
  • GWAS研究发现新的类风湿关节炎遗传机制
    类风湿性关节炎(Rheumatoidarthritis,RA)是一种自身免疫性疾病,发病时,免疫系统攻击关节中的滑膜从而导致炎症,可造成关节损伤,严重时可导致残疾。尽管现代医疗技术可以改变R......