Я начал проект по созданию отчетов с использованием данных Excel и различных Go библиотек Excel (excelize, xalex от tealeg)
Одно из самых больших разочарований, которое я обнаружил, - это работа со срезами, которые имеют некоторые нулевые индексы в зависимости от источника данных (пустые строки во входных данных передаются как индексы среза «ноль», когда я использую библиотеку xlsx для извлечения данных)
Эти индексы с нулевым срезом выбрасывают «индекс вне диапазона» очевидно, что если я когда-нибудь попытаюсь использовать их в одном из моих многочисленных циклов for, что приведет меня к кропотливой задаче - гарантировать каждый раз, когда я хочу работать с индексом среза, который на самом деле не равен нулю, с помощью len () и cap для death () (фрагмент кода ниже для иллюстрации)
//example code excerpt
for rowNumber, cellStringSlice := range inputSlice {
for rowColumn, cellString := range cellStringSlice {
//loop var declaration
rowColumnHeading := 2
rowNumberInc := rowNumber + 1
rowNumberDec := rowNumber - 1
if rowNumber > 0 {
if len(inputSlice[rowNumber]) != 0 { //len check to stop index out of range issue with slice
previousColACellValue = inputSlice[rowNumber][rowColumn]
continue
}
if len(inputSlice[rowNumber+1]) != 0 { //len check to stop index out of range issue with slice
nextColACellValue = inputSlice[rowNumber+1][rowColumn]
continue
}
}
}
Я должен указать, что в этом 2D-срезе я использую:
inputSlice[rowNumber][rowColumn]
проксимальный срез (rowNumber) никогда не равен nil (всегда есть строка) однако второй дистальный срез, который он индексирует (rowColumn), может быть нулевым в некоторых случаях - вот почему в этом сценарии мой общий l * 1 019 * всегда вводит второй внутренний l oop, даже если он выполняет итерацию, хотя строка без данных столбца (т. Е. InputSlice [rowNumber] [rowColumn] = nil), и мне часто приходится обрабатывать индекс из-за проблем диапазона
Я не могу просто удалить все нулевые индексы и сдвинуть все вверх, так как они представляют «пустые строки» в окончательном Excel. c Я вывожу эти строки в.
Так что мой Вопрос в том, существуют ли какие-нибудь полезные функции или библиотеки go, которые заботятся о индексах nil, заменяя все nils на "" в срезах и 2d / 3d срезах типа string? Или это задача для программиста всегда «дезинфицировать» свои фрагменты, удаляя эти nils или проверяя их каждый раз, когда они хотят получить доступ к элементу?
Я ценю, что мог бы написать для l oop Я могу поменять местами все эти nils на «», но написание функции, которая делает это каждый раз, когда я работаю со строками, содержащими / возможно содержащими nil, показалось бы мне немного странным