--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAOyqgcVjycg_%2BfGJvUzXrq4FARsOz45RTPSi2Fu3HFjDvfc5bg%40mail.gmail.com.
Note that other languages, such as Python, have the same behavior as Go for the reason mentioned by Ian. If you call Pop() on an empty interface/list/etc., and it returns a distinct value for that condition, you still have to check that the pop failed. It is better to require the caller to do the check before the pop. This means that callers which don't do so will randomly fail. Which is a net positive.
On Thu, Oct 10, 2019 at 9:30 PM Ian Lance Taylor <ia...@golang.org> wrote:
On Thu, Oct 10, 2019 at 9:14 PM 陈清和 <chen...@gmail.com> wrote:
>
> src/container/heap/heap.go:
>
> ```go
> func Pop(h Interface) interface{} {
> n := h.Len() - 1
> h.Swap(0, n)
> down(h, 0, n)
> return h.Pop()
> }
> ```
>
> While the h is empty, also the h.Len() equals to 0,why not return nil in advance? In the current way, we have to do boundary check in implement of Swap, otherwise there will be panic.
This is not really different from the fact that
var s []int
fmt.Println(s[0])
will also panic. Yes, if you don't know how many elements you have,
you need to check the length.
Ian
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golan...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAOyqgcVjycg_%2BfGJvUzXrq4FARsOz45RTPSi2Fu3HFjDvfc5bg%40mail.gmail.com.