Преобразование указателя слайса в слайс на ходу

У меня есть методы, которые возвращают данные в указателе слайса, теперь я должен преобразовать их в массив слайса. Как преобразовать указатель среза в массив среза.

peerRoundState, err := s.nodeview.PeerRoundStates()
fmt.Println("This return value is slice pointer", peerRoundState)
if err != nil {
    return nil, err
}
//PeerRoundStates this is type of slice.
return &ConsensusResponse{
    RoundState: s.nodeview.RoundState().RoundStateSimple(),
    PeerRoundStates: peerRound,
}, nil

я хочу преобразовать указатель среза peerRoundState в массив срезов PeerRoundStates.

1 ответ

Для слайса, вы должны быть осторожны с использованием значения слайса вместо указателя val := *ptrпотому что оба будут указывать на один и тот же адрес массива данных. Изменения, внесенные в указатель среза, также отразятся на срезе значения, поскольку структура данных среза содержит реальный массив данных ссылок.

Проверьте пример игровой площадки на 2 случая присвоения от указателя к значению. Здесь описаны два случая:

  1. копирование среза как значения, которое копирует свойства и адрес среза в массив данных
  2. копирование элементов среза - копирование всех элементов среза и создание нового среза
Другие вопросы по тегам