当我使用gorm并调用Find方法时,内存泄漏。
func(mp *message)ListMessage(ctx context.Context,ci *ClientInfo)([]Message,error){
tx := mp.db.WithContext(ctx).Raw(sql)
var mss []MessageSource
err := tx.Find(&mss).Error
if err != nil {
return nil, err
}
return mss, nil
}
1条答案
按热度按时间ws51t4hk1#
我不确定你问的问题,但无论如何我会尽力帮助你。让我分享一个代码片段,展示我通常如何使用
Raw
和Find
方法。然后,我会带你完成所有相关部分。本代码主要分为三个部分。
开始
在这个阶段,您可以看到我在示例中使用的模型(
Message
)。然后,我打开了一个连接到我通过Docker运行的本地Postgres DB。最后,我调用Automigrate
方法将结构(或模型)定义同步到DB中的表中,并插入了三条虚拟记录。Raw
+Scan
方法使用此选项,您可以手动指定要针对底层DB运行的查询。当您调用
Scan
方法时,查询实际上已经完成,该方法需要将结果Map到一个变量(例如messages
变量)。请注意,您也可以使用?
符号参数化该语句。Find
方法相反,
Find
方法期望将结果Map到的变量作为第一个参数。然后,它还期望用于记录过滤的条件。如果没有提供,则意味着您希望获得Model
方法指定的表中存在的所有记录。如果你坚持使用这些方法,你应该不会收到任何关于内存泄漏的错误或警告。让我知道这是否能帮助你找出问题,或者如果我错过了什么,谢谢!