tgoop.com/go_interview_lib/595
Create:
Last Update:
Last Update:
💬 Почему копирование структур в Go может привести к неожиданным результатам? Приведите пример.
Копирование структур может быть проблематичным, если структура содержит указатели или срезы, которые при копировании продолжают ссылаться на ту же область памяти, что и оригинал. Например, структура bytes.Buffer
содержит срез []byte
. Если скопировать объект Buffer
, методы, вызванные на копии, могут изменять данные в оригинале, так как оба объекта используют одну и ту же память.
package main
import (
"bytes"
"fmt"
)
func main() {
// Создаем оригинальный буфер
original := bytes.Buffer{}
original.WriteString("Hello")
// Копируем буфер
copyBuffer := original
// Добавляем данные в копию
copyBuffer.WriteString(", World!")
// Проверяем содержимое оригинала
fmt.Println(original.String()) // Вывод: "Hello, World!"
}
В этом примере срез
[]byte
в копии copyBuffer
ссылается на тот же массив, что и в оригинале original
. Поэтому изменения в одном буфере затрагивают другой.BY Библиотека Go для собеса | вопросы с собеседований
Share with your friend now:
tgoop.com/go_interview_lib/595