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
Go缓冲channel和非缓冲channel的区别说明
Apr 25 Golang
golang http使用踩过的坑与填坑指南
Apr 27 Golang
解决go在函数退出后子协程的退出问题
Apr 30 Golang
浅谈golang 中time.After释放的问题
May 05 Golang
关于golang高并发的实现与注意事项说明
May 08 Golang
go xorm框架的使用
May 22 Golang
Go语言实现Snowflake雪花算法
Jun 08 Golang
Go语言基础知识点介绍
Jul 04 Golang
Go语言实现Base64、Base58编码与解码
Jul 26 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
Golang实现可重入锁的示例代码
May 25 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
一家之言的经验之谈php+mysql扎实个人基本功
2008/03/27 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
php获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
checkbox 多选框 联动实现代码
2008/10/22 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
JS Loading功能的简单实现
2013/11/29 Javascript
在JS数组特定索引处指定位置插入元素的技巧
2014/08/24 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
Vuejs实现带样式的单文件组件新方法
2017/05/02 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
Python实现单词拼写检查
2015/04/25 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
Python中dict和set的用法讲解
2019/03/28 Python
树莓派实现移动拍照
2019/06/22 Python
python getpass实现密文实例详解
2019/09/24 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
消防验收申请报告
2015/05/15 职场文书