Я использовал пакет container/heap
для реализации очереди приоритетов. Меня это беспокоит. Каким должно быть поведение метода interface.Pop()
, если куча пуста? Я не вижу ничего, упомянутые в документации и не кажется, исходный код, чтобы ожидать такую ситуацию:Контейнер/куча Поп() на пустой куче
// Pop removes the minimum element (according to Less) from the heap
// and returns it. The complexity is O(log(n)) where n = h.Len().
// It is equivalent to Remove(h, 0).
//
func Pop(h Interface) interface{} {
n := h.Len() - 1
h.Swap(0, n)
down(h, 0, n)
return h.Pop()
}
Ясно, что если h.Len()
является 0
это не будет хорошо работать. Это просто означает panic
или пользователь должен всегда проверять, остались ли какие-либо предметы?
Это зависит от вас. Вы можете либо вернуть ноль, либо панику. (Я бы сказал, что более правильно позволить ему паниковать, а не позволять пользователю получить нулевое возвращаемое значение) – JimB
go глубже и проверить методы h.Swap() и down(), они проверяют пределы –
@YandryPozo - 'if j1> = n || j1 <0 {// j1 <0 после int overflow' Я думаю, что это немного другое. И 'h.Swap()' реализуется базовым 'sort.Interface'. –