![image](https://habrastorage.org/webt/ur/a8/7b/ura87bvjvghovjzb8wtg3smyo04.png)
Нулевые значения в массивах
Как и в случае с переменными, при создании массивов все содержащиеся в них значения инициализируются нулевым значением для типа, содержащегося в массиве. Так массив значений int по умолчанию заполняется нулями:
![image](https://habrastorage.org/webt/ig/s4/8x/igs48xlsd_nwxy5xqaaadb5gakq.png)
С другой стороны, нулевым значением для строк является пустая строка, так что массив строковых значений по умолчанию заполняется пустыми строками:
![image](https://habrastorage.org/webt/fi/oj/l9/fiojl9dklbioob_ls2oetnc_6wk.png)
Нулевые значения позволяют безопасно выполнять операции с элементами массивов, даже если им не были присвоены значения. Например, в следующем массиве хранятся целочисленные счетчики. Любой элемент можно увеличить на 1 даже без предварительного присваивания значения, потому что мы знаем, что все значения счетчиков начинаются с 0.
![image](https://habrastorage.org/webt/gq/ou/yx/gqouyxctwztftnlvxk-lk8kj_qi.png)
При создании массива все содержащиеся в нем элементы инициализируются нулевым значением для типа, хранящегося в массиве.
Литералы массивов
Если вам заранее известны значения, которые должны храниться в массиве, вы можете инициализировать массив этими значениями в форме литерала массива. Литерал массива начинается как тип массива — с количества элементов в квадратных скобках, за которым следует тип элементов. Далее в фигурных скобках идет список исходных значений элементов массива. Значения элементов должны разделяться запятыми.
![image](https://habrastorage.org/webt/cy/ux/mj/cyuxmjb0gs3fso_dq3a_lml5wy0.png)
Эти примеры почти не отличаются от предыдущих, если не считать того, что вместо последовательного присваивания значений элементам массива весь массив инициализируется с использованием литерала массива.
![image](https://habrastorage.org/webt/m6/g9/qx/m6g9qxgkip8kr8thcrw03z6g-je.png)
Литералы массивов также позволяют использовать короткие объявления переменных с помощью :=.
![image](https://habrastorage.org/webt/8j/tx/py/8jtxpycqehavxf_1znla8aqzgjm.png)
Литералы массивов могут распространяться на несколько строк, но перед каждым переносом строки в коде должна стоять запятая. Запятая даже должна стоять после последнего элемента в литерале массива, если за ним следует перенос строки. (На первый взгляд этот синтаксис выглядит неуклюже, но он упрощает последующее добавление новых элементов в коде.)
![image](https://habrastorage.org/webt/sa/5t/l3/sa5tl3_h5id3jl_grtbeiu-mn0c.png)
![image](https://habrastorage.org/webt/rz/mr/-9/rzmr-9qvhv5rblfjakyky7buscw.png)
Функции пакета «fmt» умеют работать с массивами
Когда вы занимаетесь отладкой кода, вам не нужно передавать элементы массивов Println и другим функциям пакета fmt один за одним. Просто передайте весь массив. Пакет fmt содержит логику форматирования и вывода массивов. (Пакет fmt также умеет работать с сегментами, картами и другими структурами данных, которые будут описаны позднее.)
![image](https://habrastorage.org/webt/w4/vc/es/w4vcesdzjlscksgeamlmdzup2ow.png)
Возможно, вы также помните глагол "%#v", используемый функциями Printf и Sprintf, — он форматирует значения так, как они отображаются в коде Go. При форматировании с "%#v" массивы отображаются в форме литералов массивов Go.
![image](https://habrastorage.org/webt/of/cl/ep/ofcleppbutvn4q1pezug-h5kq-a.png)
Обращение к элементам массива в цикле
Вы не обязаны явно записывать целочисленные индексы элементов массивов, к которым обращаетесь в своем коде. В качестве индекса также можно использовать значение целочисленной переменной.
![image](https://habrastorage.org/webt/tk/sj/0y/tksj0yw2jrkh6r9_niwu-3tjoiu.png)
Это означает, что элементы массивов можно перебирать в цикле for. Цикл перебирает индексы массива, а переменная цикла используется для обращения к элементу с текущим индексом.
![image](https://habrastorage.org/webt/v3/2x/ox/v32xoxipkcdp9yzhnzonho-qm7u.png)
При обращении к элементам массивов через переменную необходимо действовать внимательно и следить за тем, какие значения индексов используются в программе. Как упоминалось ранее, массивы содержат конкретное число элементов. Попытка обратиться к индексу за пределами массива приводит к панике — ошибке, происходящей во время выполнения программы (а не на стадии компиляции).
![image](https://habrastorage.org/webt/xg/1-/jo/xg1-joerrnp_jncq11nejc6ns2k.png)
Обычно в ситуации паники программа аварийно завершается с выводом сообщения об ошибке для пользователя. Не стоит и говорить, что таких ситуаций следует по возможности избегать.
![image](https://habrastorage.org/webt/yz/ii/m0/yziim0fxb2ihwjqknr315xqiv34.png)
Проверка длины массива функцией «len»
Написание циклов, которые ограничиваются только правильными индексами, сопряжено с определенным риском ошибок. К счастью, есть пара приемов, которые упрощают этот процесс.
Во-первых, вы можете проверить фактическое количество элементов в массиве перед обращением к элементу. Для этого можно воспользоваться встроенной функцией len, которая возвращает длину массива (количество содержащихся в нем элементов).
![image](https://habrastorage.org/webt/81/zb/jh/81zbjhxlwm7vqkv57f4tnq0bibu.png)
В цикле обработки всего массива можно воспользоваться функцией len для определения того, по каким индексам можно обращаться безопасно.
![image](https://habrastorage.org/webt/hb/hx/7f/hbhx7fnmav4dhbwrzofz7dqrbr4.png)
![image](https://habrastorage.org/webt/8o/4r/-x/8o4r-xwnzd1e2sxi0rne_hs-w6o.png)
Безопасный перебор массивов в цикле «for...range»
В другом, еще более безопасном способе обработки всех элементов массива используется специальный цикл for...range. В форме с range указывается переменная для хранения целочисленного индекса каждого элемента, другая переменная для хранения значения самого элемента и перебираемый массив. Цикл выполняется по одному разу для каждого элемента в массиве; индекс элемента присваивается первой переменной, а значение элемента — второй переменной. В блок цикла включается код для обработки этих значений.
![image](https://habrastorage.org/webt/9g/83/k_/9g83k_tsmuw132co0tvhibiuoro.png)
Эта форма цикла for не содержит запутанных выражений инициализации, условия и завершения. А поскольку значение элемента автоматически присваивается переменной, риск обращения к недействительному индексу массива исключен. Форма цикла for с range читается безопаснее и проще, поэтому именно она чаще всего встречается при работе с массивами и другими коллекциями.
Ниже приведен пример с выводом всех значений из массива нот, преобразованный для использования цикла for...range:
![image](https://habrastorage.org/webt/bb/1j/rs/bb1jrskwz9wbxiajznowcxvp3wo.png)
Цикл выполняется семь раз, по одному разу для каждого элемента в массиве notes. Для каждого элемента переменной index присваивается индекс элемента, а переменной note присваивается значение элемента. После этого мы выводим индекс и значение.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 25% по купону — Head First
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.