Go: строка массива со значением «два слова»

Меня очень смутило и заинтересовало значение «двух слов», связанное с массивом string в Go.

Например:

var strings [5]string
strings[0] = "Apple"

strings объявлен, и при присвоении другого string это будет копируемое значение из двух слов.

Может ли кто-нибудь помочь мне понять, что здесь означает «два слова»? И если есть/есть ресурсы, на которые я могу равняться, это будет большим подспорьем.

строка в Go представлена ​​как структура данных из двух слов, первое слово содержит указатель на базовые символьные данные, а второе слово содержит длину строки, и когда вы присваиваете строковое значение элементу массива, все значение из двух слов копируется в этот элемент, это означает, что копируются как указатель на символьные данные, так и длина. Следовательно, изменение строкового значения в одном элементе массива не влияет на строковое значение в других элементах!

Freeman 22.08.2023 10:37

«Слово» — это технический термин, обозначающий 8 байт (на 32-битном оборудовании — 4 байта). Фактическое оборудование работает (часто) с вещами размером в слово, такими как целые числа или указатели. Итак, «два слова» означают 16 байт. Первые 8 — длина, а вторые 8 — адрес фактического содержимого строки.

Volker 22.08.2023 11:56
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как упоминал @freeman, в golang строка представляет собой структуру данных из двух слов, одно из которых является указателем на фактическое место строкового значения, а другое — это длина, определяющая количество символов этой строки. Поэтому, когда вы назначаете вот так:

strings[0] = "Apple"

на самом деле вы присваиваете этой строке значение из двух слов. Если вы не хотите копировать два слова, вам придется работать с указателями:

var strings [5]*string
apple := "Apple"
strings[0] = &apple

Итак, вы просто копируете указатель на строку, и если вы измените значение элемента strings[0], сама строка будет изменена. Если вас интересует реализация строк в go, вот хорошее объяснение.


Другие вопросы по теме