Как хранятся строки в golang?

Создаю несколько переменных подряд. Далее к одной переменной прибавляю произвольные данные и вижу что она осталась по своему же адресу.

package main

func main() {

    i := 5
    println(&i)
    st := "st"
    println("st", &st)
    j := "jj"
    println("j", &j)
    st = "ssffffffffffffffffffffffffffffffffffffffffffffffffffffffff " + st
    println("st", &st)

}


0xc00003c748
st 0xc00003c750
j 0xc00003c760
st 0xc00003c750

Я ожидал что при конкатенации она перенесется в другое место и будет новый адрес. Т.е. поидеи итоговая строка "st" вобще не должна уместиться в промежуток между 0xc00003c760 и 0xc00003c748 там всего 12 байт получается


Ответы (1 шт):

Автор решения: prospero78su
  1. Строка -- это замаскированный срез байтов. Ссылка на срез байтов -- та же самая. Указатель на срез байтов -- другой. И вы можете получить указатель на ссылку. Но не указатель на указатель на срез байтов.
  2. Получать указатель от ссылки на строку (она берётся автоматически) -- бессмысленно, так как строки при вызовах автоматически передаются по ссылке.
→ Ссылка