golang 如何通过反射创建新对象


Posted in Golang onApril 28, 2021

废话少说,直接贴代码~

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}
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Golang 相关文章推荐
go语言map与string的相互转换的实现
Apr 07 Golang
golang判断key是否在map中的代码
Apr 24 Golang
基于Go Int转string几种方式性能测试
Apr 28 Golang
解决Goland 同一个package中函数互相调用的问题
May 06 Golang
Go 自定义package包设置与导入操作
May 06 Golang
GoLang中生成UUID唯一标识的实现
May 08 Golang
浅谈Golang 切片(slice)扩容机制的原理
Jun 09 Golang
Golang生成Excel文档的方法步骤
Jun 09 Golang
go goroutine 怎样进行错误处理
Jul 16 Golang
Go语言并发编程 sync.Once
Oct 16 Golang
Golang jwt身份认证
Apr 20 Golang
深入理解 Golang 的字符串
May 04 Golang
golang 实现两个结构体复制字段
Apr 28 #Golang
go结构体嵌套的切片数组操作
Apr 28 #Golang
golang json数组拼接的实例
Apr 28 #Golang
golang 实现对Map进行键值自定义排序
Apr 28 #Golang
go语言中json数据的读取和写出操作
Apr 28 #Golang
golang 实现菜单树的生成方式
Apr 28 #Golang
golang通过递归遍历生成树状结构的操作
Apr 28 #Golang
You might like
文件系统基本操作类
2006/11/23 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
js 匿名调用实现代码
2009/06/19 Javascript
javascript 页面只自动刷新一次
2009/07/10 Javascript
jquery 表单进行客户端验证demo
2009/08/24 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
python 根据pid杀死相应进程的方法
2017/01/16 Python
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
Python实现进程同步和通信的方法
2018/01/02 Python
浅谈python中get pass用法
2019/03/19 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
在pytorch中实现只让指定变量向后传播梯度
2020/02/29 Python
python如何调用字典的key
2020/05/25 Python
python进度条显示之tqmd模块
2020/08/22 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
几款好用的python工具库(小结)
2020/10/20 Python
python使用smtplib模块发送邮件
2020/12/17 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
expedia比利时:预订航班+酒店并省钱
2018/07/13 全球购物
银行自荐信范文
2013/10/07 职场文书
英语专业毕业生自我鉴定
2013/11/09 职场文书
学习十八大宣传标语
2014/10/09 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS