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 Gin实现文件上传下载的示例代码
Apr 02 Golang
Go语言中的UTF-8实现
Apr 26 Golang
解决Golang中ResponseWriter的一个坑
Apr 27 Golang
浅谈Golang 嵌套 interface 的赋值问题
Apr 29 Golang
解决golang结构体tag编译错误的问题
May 02 Golang
Golang: 内建容器的用法
May 05 Golang
go 实现简易端口扫描的示例
May 22 Golang
Go 语言下基于Redis分布式锁的实现方式
Jun 28 Golang
基于Go语言构建RESTful API服务
Jul 25 Golang
Go语言基础切片的创建及初始化示例详解
Nov 17 Golang
GO语言字符串处理函数之处理Strings包
Apr 14 Golang
Go gorilla securecookie库的安装使用详解
Aug 14 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使用正则验证中文
2016/04/06 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
javascript 实用的文字链提示框效果
2010/06/30 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
2011/01/12 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
js 窗口抖动示例
2013/09/04 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
JavaScript是如何实现继承的(六种方式)
2016/03/31 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
React Native中的RefreshContorl下拉刷新使用
2017/10/09 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
解决Python requests 报错方法集锦
2017/03/19 Python
详解Python中for循环是如何工作的
2017/06/30 Python
对python中array.sum(axis=?)的用法介绍
2018/06/28 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
历史博物馆观后感
2015/06/05 职场文书
Laravel中获取IP的真实地理位置
2021/04/01 PHP
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android