Это звучит очень похоже на то, что когда я обнаружил, что пишу один и тот же код несколько раз для разных массивов разных типов в других языках программирования, таких как C, fpc или delphi. Я изобрел параметрический полиморфизм для языка, который, вероятно, никогда не будет реализован, используя приемы препроцессора и назвал его «включить параметрический полиморфизм файлов» в качестве доказательства концепции того, что на самом деле можно реализовать параметрический полиморфизм в процедурном языке без необходимости ООП или какого-либо сложного система дженериков. Использование препроцессора является формой злоупотребления, но это было только для того, чтобы доказать концепцию с помощью FPC.
Поскольку Golang не использует препроцессор, вам придется использовать интерфейсы или указатели и отправлять тип в качестве параметра. Но даже использование указателей по-прежнему означает, что вам нужно написать много кода для его приведения и заставить все это работать. Интерфейсы лучше, чем указатели, потому что указатели менее безопасны.
Решения, подобные этим:
last := a[len(a)-1]
Склонны к ошибкам, потому что кто-то может забыть минус 1. В некоторых языках есть что-то немного лучше:
// return last element, the "high" of a
last := a[high(a)]
// return first element, the "low" of a
first := a[low(a)]
Вышеупомянутый код не работает в Go AFAIK (не исследовал, есть ли в go что-то похожее на это), просто то, что есть в некоторых других языках (fpc), может быть тем, что Go рассматривает.
Этот низкий и высокий способ работы с вещами абсолютно гарантирует выбор последнего и первого элемента, тогда как использование «минус один» склонно к совершению основных математических ошибок. Кто-то может забыть минус один ... потому что он запутался насчет массива на основе 1, а не массива на основе нуля. Даже если в языке нет такой вещи, как массив на основе 1, все равно можно ошибиться из-за того, что люди иногда думают на основе 1 (наши пальцы начинаются с 1, а не с 0). Некоторые умные программисты утверждают, что нет, наши пальцы начинаются с нуля, а не с одного. Ваш большой палец равен нулю. Ладно, хорошо ... но ... для большей части мира ... ;-) мы заканчиваем тем, что переключаем наш мозг с 1 на 0 в течение всего дня в реальном мире против компьютерного мира, и это вызывает многочисленные ошибки в программном обеспечении.
Но некоторые утверждают, что "Низкий" и "Высокий" - это просто синтаксический сахар, который не является необходимым на минимальном языке. Необходимо решить, стоит ли дополнительная безопасность, что во многих случаях может быть. Насколько сложность LOW () и HIGH () добавляет компилятору, я не уверен, и как это влияет на производительность ... Я не уверен на 100 процентов ... Я думаю, что компилятор может быть умным в оптимизации высоких и низких частот, но я не уверен.