我看过的大多数Go/GORM例子都是在打开数据库连接后立即调用Automigrate,包括GORM文档here。对于API服务来说,这将是一个昂贵的/需要的调用。所以,我认为,对于API服务来说,Automigrate应该从常规流中移除,并单独处理。我的理解对吗?
从GORM Documentation
...
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// Migrate the schema
db.AutoMigrate(&Product{})
...
1条答案
按热度按时间hec6srdp1#
它不会发生在每个API请求上,甚至不会接近。它会发生在每次启动应用程序时,所以基本上:连接到
main
中的DB,并在那里运行AutoMigrate
。将连接作为依赖项传递到您的处理程序/service packages/任何您需要它们的地方。HTTP处理程序可以在那里访问它。基本上是这样的:
将与DB交互的代码放在某个包中,如下所示:
然后让你的处理程序以一种合理的方式进行结构化,并为它们提供存储库(aka foo package stuff):
每当您部署应用程序的更新版本时,
main
函数将调用AutoMigrate
,应用程序将处理请求,而无需不断地重新连接到DB或一次又一次地尝试处理迁移。我不知道为什么你会认为你的应用程序必须为每个请求运行一遍设置,特别是考虑到你的主函数(或者你从
main
调用的某个函数)显式地创建了一个HTTP服务器,并在特定的端口上侦听请求。DB连接和后续的迁移应该在你开始侦听请求之前处理。它不是处理请求的一部分,永远...