官方提供的範例為
// batch size 100
result := db.Where("processed = ?", false).FindInBatches(&results, 100, func(tx *gorm.DB, batch int) error {
for _, result := range results {
// batch processing found records
}
tx.Save(&results)
tx.RowsAffected // number of records in this batch
batch // Batch 1, 2, 3
// returns error will stop future batches
return nil
})
result.Error // returned error
result.RowsAffected // processed records count in all batches
我的程式如下
type error interface {
Error() string
}
// Ssldomainlist [...]
type Ssldomainlist struct {
Domain string `gorm:"primary_key;column:domain;type:varchar(80);not null" json:"Domain"`
TaxID string `gorm:"column:taxID;type:varchar(8);not null" json:"tax_id"`
Status int `gorm:"column:status;type:int;not null" json:"status"`
}
func main() {
dsn := "user:password@tcp(127.0.0.1:3306)/db?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("連線失敗")
}
sqlDB, err := db.DB()
if err != nil {
fmt.Println("取得DB失敗")
}
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(150)
sqlDB.SetConnMaxLifetime(time.Hour)
// batch size 100
var Ssldomainlist []Ssldomainlist
count := 0
result := db.Where("status = ?", 1).FindInBatches(&Ssldomainlist, 100, batchProcesser(db, count))
}
func batchProcesser(tx *gorm.DB, batch int) error {
return nil
}
錯誤顯示為cannot use batchProcesser(db, count) (type error) as type func(*gorm.DB, int) error in argument to db.Where("status = ?", 1).FindInBatches
請問有人可以給予意見嗎?
後來實證官方src有問題,已經遞交PR
1.先執行官方範例(不做任何修改),確定可以正常執行
2.修改官方範例成你要的程式,只要修改一列
3.如果沒錯就繼續改第二列
4.如果錯了就知道是錯在第n列