之前简单地刷了一遍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对象呢,那就得看源代码如何定义这个接口的实现