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 相关文章推荐
浅谈golang 中time.After释放的问题
May 05 Golang
浅谈golang package中init方法的多处定义及运行顺序问题
May 06 Golang
goland 设置project gopath的操作
May 06 Golang
Golang全局变量加锁的问题解决
May 08 Golang
入门学习Go的基本语法
Jul 07 Golang
Go语言读取txt文档的操作方法
Jan 22 Golang
Golang 并发下的问题定位及解决方案
Mar 16 Golang
Go语言安装并操作redis的go-redis库
Apr 14 Golang
Golang 对es的操作实例
Apr 20 Golang
Golang解析JSON对象
Apr 30 Golang
详解Go语言中Get/Post请求测试
Jun 01 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
PHP 高手之路(一)
2006/10/09 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
php blowfish加密解密算法
2016/07/02 PHP
ArrayList类(增强版)
2007/04/04 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
python处理两种分隔符的数据集方法
2018/12/12 Python
Python OOP类中的几种函数或方法总结
2019/02/22 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
Python安装Bs4的多种方法
2020/11/28 Python
关于Java String的一道面试题
2013/09/29 面试题
How TDD works
2012/09/30 面试题
short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
2014/09/26 面试题
生产车间主管岗位职责
2013/12/28 职场文书
毕业生自荐信如何写
2014/03/24 职场文书
业务员自荐信范文
2014/04/20 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
学生安全责任协议书
2016/03/22 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
nginx.conf配置文件结构小结
2022/04/08 Servers
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers