golang 如何通过反射创建新对象
作者:RuoiseHone 发布时间:2024-04-27 15:24:38
标签:golang,反射,创建,对象
废话少说,直接贴代码~
type A struct {
Name string
}
// 测试unit
func TestReflect(t *testing.T) {
reflectNew((*A)(nil))
}
//反射创建新对象。
func reflectNew(target interface{}) {
if target == nil {
fmt.Println("参数不能未空")
return
}
t := reflect.TypeOf(target)
if t.Kind() == reflect.Ptr { //指针类型获取真正type需要调用Elem
t = t.Elem()
}
newStruc := reflect.New(t)// 调用反射创建对象
newStruc.Elem().FieldByName("Name").SetString("Lily") //设置值
newVal := newStruc.Elem().FieldByName("Name") //获取值
fmt.Println(newVal.String())
}
补充:Go语言中创建对象的几种方式
对于Go对象
type Car struct {
color string
size string
}
方式一:
使用T{…}方式,结果为值类型
c := Car{}
方式二:
使用new的方式,结果为指针类型
c1 := new(Car)
方式三:
使用&方式,结果为指针类型
c2 := &Car{}
以下为创建并初始化
c3 := &Car{"红色", "1.2L"}
c4 := &Car{color: "红色"}
c5 := Car{color: "红色"}
构造函数:
在Go语言中没有构造函数的概念,对象的创建通常交由一个全局的创建函数来完成,以 NewXXX 来命名,表示“构造函数” :
func NewCar(color,size string)*Car {
return &Car{color,size}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持ASP之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/ruoise/article/details/102702832
0
投稿
猜你喜欢
- 首先定义好样式,利用v-for中的index值,然后绑定样式来实现隔行变色效果。以下为完整代码,很简单,但也是个技巧。<!DOCTYP
- 一、基本数据类型前缀数据类型数据类型简写ArrayarrBooleanblnBytebytCharchrDateTimedtmDecimal
- 本文实例为大家分享了JS中FormData类实现文件上传的具体代码,供大家参考,具体内容如下上篇文章讲到了FormReader类实现文件上传
- 一、什么是Anaconda?Anaconda,中文是大蟒蛇,是一个开源的Anaconda是专注于数据分析的Python发行版本,包含了con
- 在新建数据库或附加数据库后,想添加关系表,结果出现下面的错误: 此数据库没有有效所有者,因此无法安装数据库关系图支持对象。若要继续,请首先使
- 本文实例讲述了MySQL 事务概念与用法。分享给大家供大家参考,具体如下:事务的概念MySQL事务是一个或者多个的数据库操作,要么全部执行成
- Keras中构建RNN的重要函数1、SimpleRNNSimpleRNN用于在Keras中构建普通的简单RNN层,在使用前需要import。
- Pandas如何将带有字符串元素的列拆分为多个列。使用以下字符串的方法。str.split():用定界符分割str.extract():按正
- 项目介绍:Golang100行代码实现高并发聊天室,其中实现的功能有:上下线广播,私聊,用户改名,超时强踢,在线用户检测等在开始项目前,我们
- 实际开发过程中,我们经常会被各种宽度,高度计算搞晕。尤其是使用了rem的计算方式,自适应布局难倒一大片程序员。为了解决这类问题,我觉得可以利
- 如下所示:screen.widthscreen.heightscreen.availHeight //获取去除状态栏后的屏幕高度screen
- 因为 GAE 在国内访问不便,所以平时有一些小应用,我都会放在 SAE 上面, 虽然 SAE 还有很多缺陷,但算是上手比较容易的一个了,最起
- 安装requests库之前我们需要先看一下电脑上有没有pip,可以在cmd中输入pip list查看,若出现以下内容则电脑已安装pip,否则
- 现在市场上的OA基本上可归结为两大阵营,即php阵营和java阵营。但对接触Oa不久的用户来说,看到的往往只是它们的表相,只是明显的价格差异
- 创建watermark.js文件let watermark = {}let setWatermark = (str) => { let
- Pytorch损失函数torch.nn.NLLLoss()在各种深度学习框架中,我们最常用的损失函数就是交叉熵(torch.nn.Cross
- 使用stitcher需要注意,图像太大会报错而且计算慢。特点和适用范围:图像需有足够重合相同特征区域。优点:适应部分倾斜/尺度变换和畸变情形
- 简单的小练习,实现将一个指定列表中的数值进行转化,对于其中的非负数不作处理,对于负数需要转化为制定的数值,很简单就不多说了,下面是具体的实现
- MySQL字符串的拼接、截取、替换、查找位置。常用的字符串函数:函数说明CONCAT(s1,s2,...)返回连接参数产生的字符串,一个或多
- 很多的网站都有记数器,用来记录网站的访问量,这给网站管理员即时了解本网站的运行及访问情况提供了很多的方便。笔者研究过很多用ASP编写的计数器