Я хочу получить все строки из API листов Google. Возвращает данные с типом
[][]interface{}
.
Моя структура
type Record struct {
Name string `json:"firstname"`
Mobile string `json:"mobile"`
}
Я хотел бы поместить все строки в фрагмент структуры []Record
, где каждое поле является ячейкой в листе Excel.
Пожалуйста, смотрите код ниже для моей попытки:
package main
import (
"encoding/json"
"fmt"
"log"
)
func main() {
srv err := InitialiseSheets()
fmt.Println("")
if err != nil {
log.Fatalf("Unable to retrieve data from sheet: %v", err)
}
spreadsheetId := "1VoMAKHSnB6nptPnQqabMlKWraxWolYgPBxRo-thwmgk"
readRange := "A:B"
resp, err := srv.Spreadsheets.Values.Get(spreadsheetId, readRange).Do()
if err != nil {
log.Fatalf("Unable to retrieve data from sheet: %v", err)
}
var records []Record = make([]Record, len(resp.Values))
byt, err := resp.MarshalJSON()
var dat map[string]interface{}
if err = json.Unmarshal(byt, &dat); err != nil {
panic(err)
}
for key, value := range dat {
switch key {
case "values":
switch vv := value.(type) {
case []interface{}:
for i, u := range vv {
switch r := u.(type) {
case interface{}:
records[i].Name = r.([]interface{})[0].(string)
records[i].Mobile = r.([]interface{})[1].(string)
// [Daniel Webster 425255565]
fmt.Println("kk.([]interface{})", r.([]interface{}))
// [Daniel Webster]
fmt.Println("kk.([]interface{})[0]", r.([]interface{})[0])
}
}
}
}
}
}
Я уверен, что делать что-то вроде records[i].Mobile = r.([]interface{})[1].(string)
- неправильный способ сделать это, не уверен, как я это придумал. Какой лучший способ в Go сделать то, что я пытаюсь достичь?
Если вы хотите запустить этот код, сначала настройте аутентификацию, выполнив следующие действия: https://developers.google.com/sheets/api/quickstart/go, и вы можете скопировать / вставить мой код.