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项目中使用init()
Apr 12 Golang
Go语言中的UTF-8实现
Apr 26 Golang
golang DNS服务器的简单实现操作
Apr 30 Golang
Go语言基础知识点介绍
Jul 04 Golang
golang生成vcf通讯录格式文件详情
Mar 25 Golang
Golang数据类型和相互转换
Apr 12 Golang
Golang jwt身份认证
Apr 20 Golang
Go web入门Go pongo2模板引擎
May 20 Golang
Go 内联优化让程序员爱不释手
Jun 21 Golang
在ubuntu下安装go开发环境的全过程
Aug 05 Golang
基于Python实现西西成语接龙小助手
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
简单易用的计数器(数据库)
2006/10/09 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
javascript各种复制代码收集
2008/09/20 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
各浏览器中querySelector和querySelectorAll的实现差异分析
2012/05/23 Javascript
js图片自动切换效果处理代码
2013/05/07 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
Tornado高并发处理方法实例代码
2018/01/15 Python
python实现人民币大写转换
2018/06/20 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
python实现计算器简易版
2020/12/17 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
个人对照检查材料
2014/02/12 职场文书
党员自我剖析材料
2014/08/31 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
Python实现列表拼接和去重的三种方式
2021/07/02 Python
Nginx如何配置根据路径转发详解
2022/07/23 Servers