使用gorp如何有效地插入多个记录?也就是说,不是一次插入一个,是否有批量插入?
var User struct {
Name string
Email string
Phone string
}
var users []Users
users = buildUsers()
dbMap.Insert(users...) //this fails compilation
//I am forced to loop over users and insert one user at a time. Error Handling omitted for brevity
gorp有更好的机制吗?驱动程序是MySQL。
答案 0 :(得分:3)
正如我在其他资源上发现的那样,这不起作用的原因是interface{}
和User{}
在内存中没有相同的布局,因此它们的切片不是兼容类型。建议的解决方案是将[]User{}
转换为for []interface{}
for for循环,如下所示:https://golang.org/doc/faq#convert_slice_of_interface
仍然需要注意:您需要使用DbMap.Insert()
函数的指针。
以下是我如何解决它:
s := make([]interface{}, len(users))
for i, v := range users {
s[i] = &v
}
err := dbMap.Insert(s...)
注意 &v
很重要,否则Insert
会抱怨非指针。
答案 1 :(得分:0)
看起来gorp没有为原始SQL或多值插入提供包装的东西(总是依赖于SQL方言)。
你担心速度还是交易?如果没有,我只会在for循环中进行插入。