【发布时间】:2013-09-05 20:36:37
【问题描述】:
我正在尝试找出在 Go 中构建模型的惯用方式,但我无法为大型企业类型的应用程序找到任何示例(只是很多会说话的猫和狗……)。
我首先将我的每个模型放入一个单独的包中,因为这似乎产生了最干净的 API 来使用这些模型:
import "models/person"
person.New(...) // returns the newly created person
person.GetById(123) // returns a single person
person.GetAll() // returns a list of people
但是,后来我遇到了我的模型需要大量相互引用的问题。我最终得到了如下所示的包:
-- File person.go
package Person
import "models/team"
type Person struct {
Name string
Team Team
}
func (p *Person) New(...) *Person {
...
}
-- File team.go
package Team
import "models/person"
type Team struct {
Name string
People []*Person
}
func (t *Team) New(...) *Team {
...
}
这不起作用,因为现在我有一个循环引用。我是否应该将所有这些模型添加到同一个包中以使 API 看起来像这样?
import "model"
model.NewPerson(...) // returns the newly created person
model.GetPersonById(123) // returns a single person
model.GetAllPeople() // returns a list of people
或者我应该使用接口来解决这个问题(如果是,它们会是什么样子)?
我对如何处理数据库连接等问题也有疑问。人们通常如何为他们的模型提供数据库连接(直接或通过一些中间对象)?是否每次调用都需要将某个数据库的接口作为参数,还是有更好的方法?
有没有在 Go 中构建完整的 Rest API 的更大示例?我找到了一个示例 here,但它仍然很小,作者指出他是 Go 的初学者,所以我不确定该信任多少。
谢谢!
【问题讨论】: