我看着golang的堆包的(https://golang.org/pkg/container/heap/)優先級隊列例子,碰到這樣的: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