orm.NewOrm() 函数参数传递(GO语言接口初学)

本文讲述了在Go语言中使用beego ORM进行数据库操作时遇到的事务问题。作者探讨了如何在不同函数间传递orm对象以保持事务的连续性,并解释了接口、指针和值传递的相关概念。在实践中,作者发现MySQL的事务不支持建表操作,这导致事务无法正常工作。
摘要由CSDN通过智能技术生成

之前简单地刷了一遍GO的基础语法知识,就开始学习用beego做后台开发了。在使用beego的ORM模型时,由于要使用到事务操作,需要作用于同一个orm对象,而不同的数据库操作我封装在了不同的model文件里面了。因此,就需要将同个orm对象在不同函数之间做传递了。这种一个事务操作需要调用不同函数去做不同的数据库的操作的作法我也不知道设计对不对。

首先要保证同个orm对象,第一想法就是按指针传递就好。但是编译出错了

o.Raw undefined (type *orm.Ormer is pointer to interface, not interface)

orm.Ormer其实是一个接口类型,在网上查了一下,得知永远不要使用一个指针指向一个接口类型,因为它已经是一个指针。 嗯嗯,所以只需要按值传递就好。但是,怎么能知道是同一个orm对象呢,上网查了一下和作了下验证,学到了如下知识。

1。 可以将一个对象赋值给一个接口,只要这个对象实现了这个接口所定义的方法(这里的方法接收器可以是对象或对象指针),但是通过这个接口只能调用接口内的方法,不能直接使用对象的数据成员的。
2. 接收器是指针*T时,接口实例必须是指针(即赋值给接口的是对象的指针)
3. 接收器是值 T时,接口实例可以是指针也可以是值(效果是一致的)
4. 然后在使用接口调用函数来修改对象成员时,只有接收器是指针的才会生效(真正改变到原来对象的数据成员) 这应该就是类似于传指针,同个对象了吧。

那么,在函数传递之后是不是同个orm对象呢,那就得看源代码如何定义这个接口的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值