но открыл для себя особенность, что если передавать ссылку в горутину, в горутине будет самое последнее значение переменной в цикле
это не 'особенность', это основная фича ссылок. В любом ЯП.
Сама переменная - это некоторая область в памяти, в которой записано то, что в этой переменной содержится.
При передаче параметра по значению ('без ссылок') создается еще одна такая же область в памяти, куда копируется содержимое исходной переменной. И код вызванной функции работает уже со своей копией.
При передаче параметра по указателю ('с сылками') копия переменной не создается, а в вызываемую функцию передается адрес (указатель, ссылка) области памяти в которой лежат оригинальная переменная. И вызванная функция работает уже с ним.
Очевидно, что когда два куска кода одновременно могут писать читать в одно и то же место памяти - они мгновенно 'видят' изменения, вносимые каждым.
И, естественно, в общем случае без дополнительных усилий это не thread/goroutine/etc. safe. Причем в случае, если сама переменная - что-то посложнее int, то эффект от такой одновременной работы может быть гораздо более занятным, чем просто изменение значения.