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语言中的UTF-8实现
Apr 26 Golang
golang 如何用反射reflect操作结构体
Apr 28 Golang
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
golang import自定义包方式
Apr 29 Golang
goland设置颜色和字体的操作
May 05 Golang
使用golang编写一个并发工作队列
May 08 Golang
GoLang中生成UUID唯一标识的实现
May 08 Golang
Go语言并发编程 sync.Once
Oct 16 Golang
Golang中channel的原理解读(推荐)
Oct 16 Golang
如何解决goland,idea全局搜索快捷键失效问题
Apr 03 Golang
Go归并排序算法的实现方法
Apr 06 Golang
Golang 链表的学习和使用
Apr 19 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函数
2006/10/09 PHP
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
prototype Element学习笔记(篇二)
2008/10/26 Javascript
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
JavaScript prototype 使用介绍
2013/08/29 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
js实现人才网站职位选择功能的方法
2015/08/14 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
JS中作用域以及变量范围分析
2020/07/18 Javascript
在Windows8上的搭建Python和Django环境
2014/07/03 Python
python3序列化与反序列化用法实例
2015/05/26 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
Staples英国官方网站:办公用品一站式采购
2017/10/06 全球购物
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
颁奖晚会主持词
2014/03/25 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
幼儿园课题方案
2014/06/09 职场文书
升学宴来宾致辞
2015/07/27 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书