写入CSV的行数不一致

时间:2019-05-21 10:28:23

标签: go export-to-csv

我有一个go终端应用程序,它向API查询ID列表,然后针对每个ID请求该ID的结果。

然后我提取一些数据并写入csv。

但是,我有时会得到不一致的行数。范围约为400行。

有时候我会得到相同的值。

package main

import (
    "encoding/csv"
    "fmt"
    "myapp/models"
    "myapp/utils"
    "os"

    "github.com/subosito/gotenv"
)

// var csvCache [][]string
var jobRes []models.BulkJob

var props [][]models.Props

func init() {
    gotenv.Load()
}

func main() {
    jobs := getJobsForProcessing()

    for _, j := range jobs {
        res := utils.FetchPropsForSingleJob(j, 1)
        jobRes = append(jobRes, res)
    }

    for _, r := range jobRes {
        props = append(props, r.Props)
    }

    cache := [][]string{}

    for _, p := range props {
        for _, r := range p {
            cache = append(cache, []string{r.Title})
        }
    }

    writeToCSV(cache)
}

func getJobsForProcessing() []string {
    r := utils.FetchJobsForProcessing()
    ids := []string{}

    for _, j := range r.BulkSendJobs {
        ids = append(ids, j.BulkSendJobID)
    }

    return ids
}

func writeToCSV(csvCache [][]string) {

    fmt.Print("Enter a filename: ")
    var input string
    fmt.Scanln(&input)

    filename := fmt.Sprintf("%s.csv", input)
    f, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
    utils.LogFatal(err)

    w := csv.NewWriter(f)
    for _, r := range csvCache {
        fmt.Println("Writing row:", r)
        w.Write(r)
        w.Flush()
    }
}

func pauseForInput() {
    fmt.Println("Finished.")
    var input string
    fmt.Scanln(&input)
}

这是我的大部分代码

utils.FetchPropsForSingleJob(j, 1)按ID提取作业,页面为1

这将调用我的网络工具,对响应进行解码并将其传回。

我不确定为什么这些计数会有所不同,我只能假设某些东西正在阻塞或被取消。

我的网络实用程序看起来像这样

import (
    "context"
    "net/http"
    "time"
)

func request(url string) (*http.Response, error) {
    ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
    defer cancel()

    req, _ := http.NewRequest("GET", url, nil)
    req = req.WithContext(ctx)

    resp, err := http.DefaultClient.Do(req)
    return resp, err
}

0 个答案:

没有答案