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 正则匹配效率详解
Apr 25 Golang
golang http使用踩过的坑与填坑指南
Apr 27 Golang
golang goroutine顺序输出方式
Apr 29 Golang
Go语言 go程释放操作(退出/销毁)
Apr 30 Golang
解决go在函数退出后子协程的退出问题
Apr 30 Golang
解决golang post文件时Content-Type出现的问题
May 02 Golang
Golang的继承模拟实例
Jun 30 Golang
简单聊聊Golang中defer预计算参数
Mar 25 Golang
Go调用Rust方法及外部函数接口前置
Jun 14 Golang
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
Jun 21 Golang
Go语言测试库testify使用学习
Jul 23 Golang
Go语言编译原理之源码调试
Aug 05 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中调用JAVA
2006/10/09 PHP
URL Rewrite的设置方法
2007/01/02 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
浅析js封装和作用域
2013/07/09 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
[04:23]DOTA2上海特锦赛小组赛第一日 TOP10精彩集锦
2016/02/27 DOTA
Python 文件读写操作实例详解
2014/03/12 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
详解python的数字类型变量与其方法
2016/11/20 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
Python利用PyExecJS库执行JS函数的案例分析
2019/12/18 Python
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
保送生自荐信范文
2013/10/06 职场文书
会计专业大学生求职信范文
2014/01/28 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
商场营业员岗位职责
2015/04/14 职场文书
离婚纠纷代理词
2015/05/23 职场文书
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫