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
go语言中json数据的读取和写出操作
Apr 28 Golang
golang 如何通过反射创建新对象
Apr 28 Golang
Go标准容器之Ring的使用说明
May 05 Golang
解决Goland 同一个package中函数互相调用的问题
May 06 Golang
基于Go语言构建RESTful API服务
Jul 25 Golang
修改并编译golang源码的操作步骤
Jul 25 Golang
golang中的struct操作
Nov 11 Golang
Go语言实现一个简单的并发聊天室的项目实战
Mar 18 Golang
Go并发4种方法简明讲解
Apr 06 Golang
Golang数据类型和相互转换
Apr 12 Golang
Go语言怎么使用变长参数函数
Jul 15 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
PHP网上调查系统
2006/10/09 PHP
一个简单且很好用的php分页类
2013/10/26 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
让焦点自动跳转
2006/07/01 Javascript
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
js控制web打印(局部打印)方法整理
2013/05/29 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
老生常谈js动态添加事件--- 事件委托
2016/07/19 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
高中军训第一天感言
2014/03/06 职场文书
任命书怎么写
2014/06/04 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
个人四风问题原因分析及整改措施
2014/09/28 职场文书
2014年转正工作总结
2014/11/08 职场文书
行政司机岗位职责
2015/04/10 职场文书
Java实现学生管理系统(IO版)
2022/02/24 Java/Android
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫