Comments 4
Хорошо бы всем понимать как работают строки в языке которым они пользуются :) В go просто строгая типизация и по этому такие вещи приходится учитывать.
Эта статья чуть ли не копипаст из блога 12 летней давности:
https://go.dev/blog/strings
В статье не затронуты важные моменты:
1. константные строки - те самые что var := "string" // - тут "string" - константа и все другие строки в коде "string" будут по факту храниться в одном месте. Более того их длинна не будет хранится в памяти (как у строк рантайма) - вместо нее будет подставляться константа при компиляции. Поэтом бессмысленно объявлять именованную строковую константу и использовать ее во всех местах где встречается эта строка. Такую оптимизацию за вас сделает компилятор.
2. в отличии от строк констант, строки получаемые в райнтайме на хранятся в одном и том же месте даже если они одинаковые. Т.е. 100500 одинаковых строк используемых в исходном коде - это по факту одна строка, а 100500 одинаковых строк полученных в рантайме (парсинг какого-нибудь ответа из API, например) будут представлены в памяти как 100500 отдельных строк. Не хотите такого - используйте uniq.
Ничего не написано про графемы, которые могут состоять из нескольких юникод-точек, например "🤦♂".
Строки(strings) в Go