Я думаю, что они ссылаются здесь на то, что доступ к массивам всегда проверяется по фактической длине массива, таким образом отключая один из наиболее распространенных способов случайного сбоя или сбоя программ на Си.
Например:
package main
func main() {
var a [10]int
for i:= 0; i < 100; i++ {
a[i] = i
}
}
будет panic
с ошибкой во время выполнения при попытке обновить несуществующий 11-й элемент массива. С мог бы набросаться на кучу и, вероятно, тоже потерпеть крах, но неконтролируемым образом. Каждый массив знает свою длину. В некоторых случаях у компилятора будет возможность оптимизировать проверки, если он сможет доказать, что они не нужны. (Или достаточно умный компилятор может статически обнаружить проблему в этой функции.)
Многие другие ответы говорят о расположении памяти в стеке, но на самом деле это не имеет значения: у вас также могут быть атаки переполнения кучи.
В основном, указатели Go всегда должны быть безопасными с типами, с массивами и другими типами, если вы специально не используете пакет unsafe
.