The point is, you will not know whether the caller send a nil or not.

dc0d於 2018年1月1日星期一 UTC+8上午1時27分29秒寫道:
>
> I do not see how it should make me panic. If it's nil, it will be ignored 
> and if it's not nil only then calling first() should cause a dead lock. 
> That's common sense.
>
> But since "it is working according to the spec", it seems I should live 
> with this and move on.
>
> On Sunday, December 31, 2017 at 8:15:35 PM UTC+3:30, leaf...@gmail.com 
> wrote:
>>
>>
>>
>> dc0d於 2017年12月31日星期日 UTC+8下午11時40分44秒寫道:
>>>
>>> Or the (not only) other option is check for nil channels before entering 
>>> the scope of select?
>>>
>>
>> Change a little bit of your code. 
>>
>> package main
>>
>>
>> import (
>>  "log"
>>  "time"
>> )
>>
>>
>> func main() {
>>  f(nil)
>>  f(make(chan bool))
>> }
>>
>>
>> func first() bool {
>>  select {}
>> }
>>
>>
>> func f(rcvd chan bool) {
>>  // for demonstration purpose 
>>  select {
>>  case rcvd <- first():
>>
>>  case <-time.After(time.Second):
>>  log.Println("timeout")
>>  }
>>  log.Println("done")
>> }
>>
>>
>> func init() {
>>  log.SetFlags(0)
>> }
>>  Now you are living in panic (pun intended) with worries whether it block 
>> or not, as you can not guarantee what value is passed into the function.
>>
>> Does this seem good or common sense to you?
>>
>

-- 
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