я смотрел (https://golang.org/pkg/container/heap/) пример очереди Приоритет кучного пакета golang в и наткнулся на это:Golang указатель на срез и массив
type PriorityQueue []*Item
...
func (pq *PriorityQueue) Pop() interface{} {
old := *pq
n := len(old)
item := old[n-1]
item.index = -1 // for safety
*pq = old[0 : n-1]
return item
}
Когда я начал играть с этим кодом, чтобы убедиться, что я понял, я проверено:
item := *pq[0] // error
Это дает вам тип * [] T не поддерживает индексацию. Но если вы это сделаете:
item := (*pq)[0] // all is well
Это правильный тип утверждения? Хотел, чтобы кто-то мог объяснить, что здесь происходит.
Вот код, чтобы быстро показать это: https://play.golang.org/p/uAzYASrm_Q
Нет, 'pq' является переменной. '(* pq)' - это оператор разыменования переменной. Итак, '(* pq) [0]' эквивалентно 'a: = * pq; а [0] '. – joshlf