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语言-为什么返回值为接口类型,却返回结构体
Apr 24 Golang
golang在GRPC中设置client的超时时间
Apr 27 Golang
go结构体嵌套的切片数组操作
Apr 28 Golang
彻底理解golang中什么是nil
Apr 29 Golang
Golang: 内建容器的用法
May 05 Golang
Go 在 MongoDB 中常用查询与修改的操作
May 07 Golang
go xorm框架的使用
May 22 Golang
再次探讨go实现无限 buffer 的 channel方法
Jun 13 Golang
Golang表示枚举类型的详细讲解
Sep 04 Golang
简单聊聊Golang中defer预计算参数
Mar 25 Golang
Go 内联优化让程序员爱不释手
Jun 21 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
一个MYSQL操作类
2006/11/16 PHP
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
微信小程序实现时间预约功能
2018/11/27 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
Python中对列表排序实例
2015/01/04 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
Python格式化输出%s和%d
2018/05/07 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
python取余运算符知识点详解
2019/06/27 Python
Python with语句和过程抽取思想
2019/12/23 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
你对IPv6了解程度
2016/02/09 面试题
解除劳动合同协议书
2014/04/14 职场文书
应届大专生求职信
2014/06/26 职场文书
2014年会计工作总结
2014/11/27 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书