我创建了一个函数来获取一些数据并将它们写入CSV并将输出存储在缓冲区中.
type OptIn struct {
Email string `json:"email"`
LastUpdate string `json:"opt_in_last_update"`
}
func writeCSV(data []OptIn) ([]byte, error) {
var buf bytes.Buffer
writer := csv.NewWriter(&buf)
defer writer.Flush()
for _, obj := range data {
var record []string
record = append(record, obj.Email)
record = append(record, obj.LastUpdate)
err := writer.Write(record)
if err != nil {
panic(err.Error())
}
}
return buf.Bytes(), nil
}
Run Code Online (Sandbox Code Playgroud)
问题是buf.Bytes()始终为空,即使输入不为空且没有抛出错误.
你需要在回电writer.Flush()之前打电话.Bytes()和检查.Error()之前打电话:
// TODO: remove `defer writer.Flush()`
// ...
writer.Flush()
if err := writer.Error(); err != nil {
return nil, err
}
return buf.Bytes(), nil
}
Run Code Online (Sandbox Code Playgroud)
您的示例代码按以下顺序执行:
buf.Bytes()writer.Flush()很明显,这不是预期的顺序,因为我们需要在访问生成的字节切片之前刷新(并检查任何编写器错误!).
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |