我想制作一个通用模型结构嵌入在将使用gorp
(https://github.com/coopernurse/gorp)来坚持我的MySQL数据库中的对象的结构。我的理解是,这种组合是如何在Go中完成那些用强OO语言继承的东西。Golang:有没有办法在Go的组合模型中访问“父”结构的方法中的“子”结构?
但是,我没有得到好运,因为我想定义GorpModel
结构中的所有CRUD方法,以避免在每个模型中重复它们,但这会导致gorp
(因为我正确使用它现在)假设我想与之交互的表格由于gorp
使用的反射而被称为GorpModel
。这自然会导致错误,因为我的数据库中没有这样的表。
有没有什么方法可以找出/使用我在(嵌入超类GorpModel
)的类型,使下面的代码工作,或者我吠叫错误的树?
package models
import (
"fmt"
"reflect"
"github.com/coopernurse/gorp"
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
type GorpModel struct {
New bool `db:"-"`
}
var dbm *gorp.DbMap = nil
func (gm *GorpModel) DbInit() {
gm.New = true
if dbm == nil {
db, err := sql.Open("mysql", "username:[email protected]_db")
if err != nil {
panic(err)
}
dbm = &gorp.DbMap{Db: db, Dialect: gorp.MySQLDialect{"InnoDB", "UTF8"}}
dbm.AddTable(User{}).SetKeys(true, "Id")
dbm.CreateTables()
}
}
func (gm *GorpModel) Create() {
err := dbm.Insert(gm)
if err != nil {
panic(err)
}
}
func (gm *GorpModel) Delete() int64 {
nrows, err := dbm.Delete(gm)
if err != nil {
panic(err)
}
return nrows
}
func (gm *GorpModel) Update() {
_, err := dbm.Update(gm)
if err != nil {
panic(err)
}
}
的GorpModel
结构的New
属性是用来保持它是否是一个新创建的模型跟踪,我们是否应该呼吁Save
Update
或Insert
(这是在孩子User
结构,此刻定义)。
谢谢你好先生。这最终目前正满足我的需求。 – ZenLikeThat 2013-04-22 03:36:57