# Как же все таки изменить байты строки в Go? Просто захотелось чуть чуть поиграться с пакетом unsafe в Go. Строки (тип string) в Go являются *immutable*, то есть изменять их нельзя. Ну вообще конечно можно, но не напрямую. Строка в Go под капотом является структурой вида: **указатель на данные, длина данных.** И первое, что приходит в голову чтобы изменить строку - добраться до поля с указателем, прибавить к нему индекс байта который надо поменять, разыменовать полученный адрес и что то ему присвоить. Но в реальности все не так просто и при попытке что то положить по вычисленному адресу программа упадет с *segmentation fault (SIGSEGV)*. Чтобы этого избежать, предварительно надо выдать права на запись в страничку памяти где находится целевая строка. Сделать это можно через системные вызовы. Код с пояснениями можно скачать [тут](https://git.hikan.ru/serr/unsafe-change-string-go) Тестил на **go version go1.22.2 linux/amd64**