我想製作一個通用模型結構嵌入在將使用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