我有一个BaseEntity结构和一个带有* BaseEntity接收器的方法,它从文件中分析xml
type BaseEntity struct {
FilePath string
Collection string
}
func (this *BaseEntity) Parse() *[]byte {
xmlFile, err := ioutil.ReadFile(this.FilePath)
if err != nil {
fmt.Println("Error opening file:", err)
return nil
}
return &xmlFile
}
我也有几个嵌入BaseEntity的结构,例如。用户,帖子,评论,标签......等
type Users struct {
Data []User `xml:"row"`
BaseEntity
}
type User struct {
WebsiteUrl string `xml:"WebsiteUrl,attr"`
UpVotes string `xml:"UpVotes,attr"`
Id string `xml:"Id,attr"`
Age string `xml:"Age,attr"`
DisplayName string `xml:"DisplayName,attr"`
AboutMe string `xml:"AboutMe,attr"`
Reputation string `xml:"Reputation,attr"`
LastAccessDate string `xml:"LastAccessDate,attr"`
DownVotes string `xml:"DownVotes,attr"`
AccountId string `xml:"AccountId,attr"`
Location string `xml:"Location,attr"`
Views string `xml:"Views,attr"`
CreationDate string `xml:"CreationDate,attr"`
ProfileImageUrl string `xml:"ProfileImageUrl,attr"`
}
func (this *Users) LoadDataToDB() {
file := this.Parse()
xml.Unmarshal(*file, &this)
// Init db
db := database.MgoDb{}
db.Init()
defer db.Close()
for _, row := range this.Data {
err := db.C(this.Collection).Insert(&row)
if err != nil {
fmt.Println(err)
}
}
}
对于每个结构,我需要创建一个方法LoadDataToDB,它在db中加载数据并有一些代码。
这个方法不能有* BaseEntity接收器,因为我无法在base结构中得到this.Data,我不能从参数中获取这个结构,因为它总是一个不同的结构。
如何干掉并将这个重复方法从每个嵌入式结构移动到一个?