Читать строку CSV в список пользовательских объектов Go Language
Я пытаюсь прочитать строку данных из файла CSV и разобрать данные в список пользовательских объектов. Основная проблема, с которой я столкнулся - это преобразование данных в правильный тип данных в цикле.
Вот мой пользовательский объект:
type yahooInfoObj struct {
date time.Time
open float32
high float32
low float32
close float32
volume int
adjClose float32
}
Вот моя функция, которая получает данные и пытается их проанализировать:
func getSingleCompanyData(search searchObj) []yahooInfoObj {
searchQuery := buildYahooFinanceDataQueryString(search)
data := getRequest(searchQuery)
r := csv.NewReader(strings.NewReader(data))
var stats []yahooInfoObj
// Read csv file
result, _ := r.ReadAll()
//loop through each returned stat (line)
for i := range result {
//skip the first entry due to column names being returned
if i != 0{
stat := result[i]
stats = append(stats, yahooInfoObj{stat[0],strconv.ParseFloat(stat[1],32),strconv.ParseFloat(stat[2],32),strconv.ParseFloat(stat[3],32),strconv.ParseFloat(stat[4],32),strconv.Atoi(stat[5]),strconv.ParseFloat(stat[6],32)})
}
}
return stats
}
Вот некоторые примеры данных, которые будут возвращены и помещены в переменную данных:
Date,Open,High,Low,Close,Volume,Adj Close
2010-12-31,31.219999,31.33,30.93,31.299999,11716300,29.517661
2010-12-30,31.450001,31.58,31.209999,31.290001,12989400,29.508232
2010-12-29,31.530001,31.690001,31.42,31.50,9769000,29.706273
2010-12-28,31.66,31.76,31.41,31.57,9736000,29.772287
Я новичок в языке go и буду очень признателен за любые советы. Заранее спасибо!
1 ответ
Есть несколько вещей, которые я сразу заметил:
Вы не используете
time.Time
объект для отправки на вашyahooInfoObj
структура. Вы отправляете строкуВы вызываете функции, которые возвращают несколько значений в "контексте одного значения". Это означает, что вы просто ожидаете игнорировать второе значение, но для Go это ошибка в вашем коде. Вам придется явно установить эти значения.
Вы не проверяете множественные ошибки. Всегда проверяйте ошибки - это предотвратит ошибки в будущем.
Это не идеально, но, похоже, рабочая площадка: https://play.golang.org/p/idQFFVjS-X