Преобразование указателя слайса в слайс на ходу
У меня есть методы, которые возвращают данные в указателе слайса, теперь я должен преобразовать их в массив слайса. Как преобразовать указатель среза в массив среза.
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 случая присвоения от указателя к значению. Здесь описаны два случая:
- копирование среза как значения, которое копирует свойства и адрес среза в массив данных
- копирование элементов среза - копирование всех элементов среза и создание нового среза