Преобразование указателя слайса в слайс на ходу - PullRequest
0 голосов
/ 26 октября 2018

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

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 Ответ

0 голосов
/ 26 октября 2018

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

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

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