Why? Consider this code. When c is first evaluated, it's ok to send
on, so it would
evaluate f, but f causes c to be not ready, so f has been evaluated even though
c cannot be sent on.

    package main

    import (
        "log"
        "time"
    )

    func main() {
        c := make(chan int, 1)
        f := func() int {
            c <- 1
            return 0
        }
        select {
        case c <- f():
        case <-time.After(time.Second):
            log.Printf("could not send value")
        }
    }

On 24 January 2018 at 19:59, dc0d <kaveh.shahbaz...@gmail.com> wrote:
> It is as described in the spec. Regarding the specs it's correct. But that's
> not the reason.
>
> The original question is about the "why".
>
> Why is that so? This behavior was unexpected.
>
> On Wednesday, January 24, 2018 at 11:20:01 PM UTC+3:30, Axel Wagner wrote:
>>>
>>> Both the channel and the value expression are evaluated before
>>> communication begins. Communication blocks until the send can proceed. A
>>> send on an unbuffered channel can proceed if a receiver is ready. A send on
>>> a buffered channel can proceed if there is room in the buffer. A send on a
>>> closed channel proceeds by causing a run-time panic. A send on a nil channel
>>> blocks forever.
>>
>>
>> https://golang.org/ref/spec#Send_statements
>>
>> So, yes.
>>
>> On Wed, Jan 24, 2018 at 8:43 PM, dc0d <kaveh.sh...@gmail.com> wrote:
>>>>
>>>> If the channel is nil, there's nothing to lock. But also, there's no
>>>> sending happening.
>>>
>>>
>>> So first the payload is computed and then the nil check happens?
>>>
>>> --
>>> 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.
>>> For more options, visit https://groups.google.com/d/optout.
>>
>>
> --
> 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+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
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+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to