如何在避免golang类型的同时编组和解组或转换对象

时间:2017-09-20 23:29:56

标签: dataframe go google-sheets-api

我正在开发代码以将Google表格与数据框sdk集成:https://github.com/kniren/gota。此代码每次都会导致“df:= dataframe.LoadRecords(values)”出现混乱。当我使用调试器时,它显示出恐慌。观察者中的所有内容都在我的[] []字符串中显示完全符合预期的值。如果有更好的方法将sheet单元格转换为[] []字符串,请发表评论。

package main

import (
    "bitbucket.org/gosheets"
    "fmt"
    "github.com/kniren/gota/dataframe"
    "reflect"
)

func main() {
    sheetdata := gosheets.Setup()
    // row1 is column names
    fmt.Println(reflect.TypeOf(sheetdata.Values))
    values := [][]string{}
    //sheetdata.Values.(*sheets.ValueRange)
    fmt.Sprintln(sheetdata.Values)
    for _, row := range sheetdata.Values.Values {
        sr := []string{}
        for i, cell := range row {
            //capping columns at 5 for starters
            if i >= 5 {
                break
            }
            sr = append(sr, fmt.Sprint(cell))
        }
        fmt.Sprintln(row)
        values = append(values, sr)
        //values = append(values, fmt.Sprintln(row))
    }
    //opts := dataframe.LoadOption{detectTypes: false}
    df := dataframe.LoadRecords(values)

    //df := dataframe.ReadCSV(sheetdata.Values)
    //fmt.Println(sheetdata.Values)
    fmt.Println(df.Names())

}

1 个答案:

答案 0 :(得分:0)

尝试提供一个可运行的示例,因为它使调试更容易。这看起来像是使用私有代码,但您应该能够在不使用gosheets lib的情况下使用测试输入进行重现。

因此,尝试将其作为例如sheetdata会产生恐慌:

sheetdata := [][]string{{"1", "2", "3", "4", "5"}, {"1", "2", "3"}}

https://play.golang.org/p/hJXBlO_40O

所以,如果您的错误是这样的:

panic: runtime error: index out of range

github.com/kniren/gota/dataframe.LoadRecords(0xc420058060, 0x2, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
github.com/kniren/gota/dataframe/dataframe.go:693 +0xc53

您的数据可能包含的标题字段长于后续行(假设它正在查看csv数据)。这个假设在here中出现,LoadRecords应该检查并返回错误而不是恐慌。