HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: go, golang, двумерные срезы</p>
1 <p>Теги: go, golang, двумерные срезы</p>
2 <p>В языке программирования Go массивы и срезы являются одномерными. Для создания эквивалента 2-мерного массива либо среза надо определить массив массивов либо срез срезов. Давайте посмотрим, как это может выглядеть:</p>
2 <p>В языке программирования Go массивы и срезы являются одномерными. Для создания эквивалента 2-мерного массива либо среза надо определить массив массивов либо срез срезов. Давайте посмотрим, как это может выглядеть:</p>
3 <p>Так как срезы имеют переменную длину, то появляется возможность иметь каждый внутренний срез с различной длиной. В том же нашем LinesOfText-примере каждая строка обладает независимой длиной.</p>
3 <p>Так как срезы имеют переменную длину, то появляется возможность иметь каждый внутренний срез с различной длиной. В том же нашем LinesOfText-примере каждая строка обладает независимой длиной.</p>
4 <p>В некоторых случаях может понадобиться выделить двумерный срез. Такая ситуация может возникнуть, например, при обработке сканированных строк пикселей. Выделить 2-мерный срез можно двумя путями:</p>
4 <p>В некоторых случаях может понадобиться выделить двумерный срез. Такая ситуация может возникнуть, например, при обработке сканированных строк пикселей. Выделить 2-мерный срез можно двумя путями:</p>
5 <ol><li>Первый путь -- выделение каждого среза независимо.</li>
5 <ol><li>Первый путь -- выделение каждого среза независимо.</li>
6 <li>Второй способ заключается в выделении одного массива и указании отдельных срезов в нем.</li>
6 <li>Второй способ заключается в выделении одного массива и указании отдельных срезов в нем.</li>
7 </ol><p>Какой из этих путей использовать, будет зависеть от конкретного приложения. При этом стоит понимать, что если срезы могут расти либо уменьшаться, то их надо выделять независимо -- это позволит избежать перезаписи следующей строки. В обратном случае более эффективным будет построение объекта с<strong>однократной аллокацией</strong>.</p>
7 </ol><p>Какой из этих путей использовать, будет зависеть от конкретного приложения. При этом стоит понимать, что если срезы могут расти либо уменьшаться, то их надо выделять независимо -- это позволит избежать перезаписи следующей строки. В обратном случае более эффективным будет построение объекта с<strong>однократной аллокацией</strong>.</p>
8 <p>Рассмотрим эти два способа подробнее. Первый вариант реализации, строка за раз:</p>
8 <p>Рассмотрим эти два способа подробнее. Первый вариант реализации, строка за раз:</p>
9 <p>Второй вариант реализации -- одно аллоцирование, которое разбито на строки:</p>
9 <p>Второй вариант реализации -- одно аллоцирование, которое разбито на строки:</p>
10 <p><em>По материалам сайта https://golang-blog.blogspot.com/.</em></p>
10 <p><em>По материалам сайта https://golang-blog.blogspot.com/.</em></p>
11  
11