我有一个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
}