Скопируйте часть указателей (указывая на новые значения) - PullRequest
0 голосов
/ 03 марта 2019

Я хотел бы сделать копию слайса, содержащего указатели, чтобы указатели в новом слайсе указывали на новые значения: скажем, s - это оригинальный слайс, а c - это копия.Тогда изменение *c[i] должно не повлиять на *s[i].

Согласно этому ответу , это не то, что происходит с обычными методами копирования.

Какой самый короткий способ сделать это?

1 Ответ

0 голосов
/ 04 марта 2019

Используйте следующий код для копирования значений:

c := make([]*T, len(s))
for i, p := range s {

    if p == nil {
        // Skip to next for nil source pointer
        continue
    }

    // Create shallow copy of source element
    v := *p

    // Assign address of copy to destination.
    c[i] = &v
}

Запустите его на игровой площадке .

Этот код создает поверхностную копию значения.В зависимости от требований приложения может потребоваться глубокое копирование значения или, если это тип структуры, одного или нескольких полей.Особенности зависят от фактического типа T и требований к применению.

...