我有一个函数调用API来获取项目并返回项目以与另一个数据库同步。我可以指定返回的项目限制。如果限制为 700,则返回 700 个项目。如果超过 700,则返回空切片。
func (d *dataBaseWriterImpl) WriteProducts() error {
username := os.Getenv("USERNAME")
password := os.Getenv("PASSWORD")
// get token
token, err := d.authService.Login(username, password)
if err != nil {
return err
}
// load products
// here the problem if count more than 700 <----
products, _ := d.scrapperService.LoadProducts(702, 1, token)
log.Printf("products count -> %d", len(products)) // gives me 0 <-----
errChan := make(chan error, 2)
var cats []models.Category
db.Conn.Model(&models.Category{}).Find(&cats)
var catIds []string
for _, cat := range cats {
catIds = append(catIds, cat.ExternalId)
}
for _, prod := range products {
if d.isValidProduct(catIds, prod.PrimaryVariant.CategoryID) {
log.Printf("update id -> %v", prod.PrimaryVariant.ID)
go d.saveOrUpdateProducts(prod.PrimaryVariant, errChan)
} else {
log.Printf("will not update id -> %v", prod.PrimaryVariant.ID)
go func() {
errChan <- nil
}()
}
}
for range products {
err := <-errChan
if err != nil {
return err
}
}
return nil
}
我记录项目长度,然后返回它返回 LoadProducts 实现中的实际值。
func (s serviceImpl) LoadProducts(count uint, page uint, token string) ([]models.VariantsResult, error) {
jsonBody := []byte(fmt.Sprintf(`{"pageSize": %d, "page": %d, "sortBy": "updatedAt"}`, count, page))
body := bytes.NewBuffer(jsonBody)
// Create request
req, err := http.NewRequest("POST", fmt.Sprintf("%v/api/variantGroups/search", os.Getenv("BACKEND")), body)
if err != nil {
log.Print(err)
}
蓝山帝景
相关分类