golang 函数在切片长度超过 700 项时返回空切片

我有一个函数调用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)

    }

   


蝴蝶刀刀
浏览 145回答 1
1回答

蓝山帝景

几乎可以肯定的是,您返回了错误,但随后忽略了它。nil 切片的长度和容量为 0,并且没有基础数组。https://tour.golang.org/moretypes/12你返回没有,错误在这里:// in LoadProductsif err != nil {&nbsp; &nbsp; return nil, err}但随后做products, _ := d.scrapperService.LoadProducts(702, 1, token)log.Printf("products count -> %d", len(products)) // gives me 0 <---这应该是products, err := d.scrapperService.LoadProducts(702, 1, token)if err != nil {&nbsp; &nbsp; panic(err) // dont actually panic, but figure out what went wrong}log.Printf("products count -> %d", len(products)) // gives me 0 <---
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go