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 02 Golang
go语言map与string的相互转换的实现
Apr 07 Golang
win10下go mod配置方式
Apr 25 Golang
golang 实现两个结构体复制字段
Apr 28 Golang
解决Go gorm踩过的坑
Apr 30 Golang
对Golang中的FORM相关字段理解
May 02 Golang
golang日志包logger的用法详解
May 05 Golang
golang 实现时间戳和时间的转化
May 07 Golang
golang 实用库gotable的具体使用
Jul 01 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 Golang
Golang 链表的学习和使用
Apr 19 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三元运算符的结合性介绍
2012/01/10 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
javascript URL编码和解码使用说明
2010/04/12 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
微信小程序 wx:key详细介绍
2016/10/28 Javascript
Angular实现的自定义模糊查询、排序及三角箭头标注功能示例
2017/12/28 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
Linux下python3.7.0安装教程
2018/07/30 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
2020/03/13 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
创伤外科专业推荐信范文
2013/11/19 职场文书
《会变的花树叶》教学反思
2014/02/10 职场文书
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
校园之声广播稿
2015/08/18 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS