Я разборе CSV файл, который содержит целочисленные значения, некоторые из них могут отсутствовать:Golang считывать данные из файла и указать отсутствующее значение
1,2,3
1,2,
1,2,3
В моем коде я заселять-структуру с данными :
type Line struct {
One *int
Two *int
Three *int
}
Мой текущий догадка для обработки пропущенных значений будет использовать указатель на int
для того, чтобы показать, является ли отсутствует значение:
// if nil, then no value in file
l := &Line{}
// read and parse...
l.Three = nil
Однако, используя этот подход делает assingment к *int
громоздким:
l := &Line{}
// NOT POSSIBLE, NOT COMPILING (cannot use 5 (type int) as type *int in assignment)
l.One = 5
// FEELS WRONG, BUT WORKS
tmpInt := 5
l.One = &tmpInt
Как обрабатывать недостающие целые значения?
Это можно делать то, что делает goprotobuf и имеют [вспомогательную функцию] (https://godoc.org/ code.google.com/p/goprotobuf/proto#Int), который принимает int. Возвращаемое значение - это указатель на int, значение которого вы передали функции (например: 'l.One = mypackage.Int (5)'). –
Из любопытства, почему бы не использовать [Reader из пакета CSV] (http://golang.org/pkg/encoding/csv/), который поддерживает пустые поля? – bishop
@TimCooper Это круто. Я также подумал о вспомогательной функции, но предположил, что будет более идиоматический golang способ выражения недостающих значений. Реализация goprotobuf: https://code.google.com/p/goprotobuf/source/browse/proto/lib.go#299, почему не просто: http://play.golang.org/p/gg0up2vfaQ – Kiril