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 相关文章推荐
解决golang post文件时Content-Type出现的问题
May 02 Golang
goland 设置project gopath的操作
May 06 Golang
入门学习Go的基本语法
Jul 07 Golang
Go语言读取txt文档的操作方法
Jan 22 Golang
Golang 1.18 多模块Multi-Module工作区模式的新特性
Apr 11 Golang
Golang流模式之grpc的四种数据流
Apr 13 Golang
GO语言异常处理分析 err接口及defer延迟
Apr 14 Golang
Golang 字符串的常见操作
Apr 19 Golang
Golang获取List列表元素的四种方式
Apr 20 Golang
Golang日志包的使用
Apr 20 Golang
Golang ort 中的sortInts 方法
Apr 24 Golang
详解Go语言中Get/Post请求测试
Jun 01 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产生动态的影像图
2006/10/09 PHP
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
点图片上一页下一页翻页效果
2008/07/09 Javascript
JavaScript Date对象使用总结
2009/05/14 Javascript
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
详解ES6 Symbol 的用途
2018/10/14 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
python文件与目录操作实例详解
2016/02/22 Python
Python+微信接口实现运维报警
2016/08/27 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
django的autoreload机制实现
2020/06/03 Python
python中加背景音乐如何操作
2020/07/19 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
python实现简单猜单词游戏
2020/12/24 Python
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
军训自我鉴定200字
2014/02/13 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
2014年后勤工作总结
2014/11/18 职场文书
委托公证书样本
2015/01/23 职场文书
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js