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 interface{}==nil 的几种坑及原理分析
Apr 24 Golang
go语言-在mac下brew升级golang
Apr 25 Golang
golang中实现给gif、png、jpeg图片添加文字水印
Apr 26 Golang
彻底理解golang中什么是nil
Apr 29 Golang
聊聊golang中多个defer的执行顺序
May 08 Golang
golang fmt格式“占位符”的实例用法详解
Jul 04 Golang
使用GO语言实现Mysql数据库CURD的简单示例
Aug 07 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 Golang
Golang 入门 之url 包
May 04 Golang
Go gRPC进阶教程gRPC转换HTTP
Jun 16 Golang
Go微服务项目配置文件的定义和读取示例详解
Jun 21 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
php 一元分词算法
2009/11/30 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
PHP children()函数讲解
2019/02/03 PHP
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
jQuery版Tab标签切换
2011/03/16 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
angularJS1 url中携带参数的获取方法
2018/10/09 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
python实现html转ubb代码(html2ubb)
2014/07/03 Python
解决yum对python依赖版本问题
2019/07/05 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
Senreve官网:美国旧金山的奢侈手袋品牌
2019/03/21 全球购物
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
乌克兰在线药房:Аптека24
2019/10/30 全球购物
一名女生的自荐信
2013/12/08 职场文书
厂长助理岗位职责
2013/12/27 职场文书
运动会入场解说词300字
2014/01/25 职场文书
军训自我鉴定怎么写
2014/02/13 职场文书
2014年人事科工作总结
2014/11/19 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
Python OpenCV之常用滤波器使用详解
2022/04/07 Python