如何存储Google Sheets API对文件的响应



在我的学习过程中,我想将GSheet数据范围的响应存储到一个文件中,以便在另一个程序中进一步使用。

据我所见,GSheet API用一个带有单元格数据的多维数组进行响应,所以我的第一个想法是只使用for循环将每一行写入文本文件,并在读取时反转将每一行都附加到新数组的过程

响应值的类型为[][]接口{}https://godoc.org/google.golang.org/api/sheets/v4#ValueRange

fmt.Println("Writing response to file:")
f, _ := os.Create("gSheetDump")
defer f.Close()
for _, row := range resp.Values {
for _, column := range row{
f.WriteString(column.(string)) //the cell data
f.WriteString(" ") //space as column delimiter
}
f.WriteString("n") //new row of data
}
f.Sync()

为简便起见,省略了错误检查和其他最佳实践。

事实上,代码在简单的场景中工作,我得到了一个带有的文件(为了测试目的,只有2列带有随机数(

0.1334477383 0.9119418
0.9302617807 0.6528034118
0.2401513927 0.7896743972
0.7807423779 0.006702754729
0.5697572871 0.4395454573
0.01565383694 0.1403231739
0.3567884312 0.6965423498

但是,当您获得更复杂的数据时,一个简单的空间不足以分隔列,就会出现问题。

有一些惯用的方法可以达到预期的效果吗?

您可以使用json编码而不是文本:

json.NewEncoder(f).Encode(resp.Values)

这将把数据作为JSON数组写入文件f。您无法使用[][]接口{}读回它,您必须提供具体类型:

var data [][]float64
json.NewDecoder(f).Decode(&data)