goroutine求助

leavesdrift · · 816 次点击
原来是 channel 不能二次读取,自己发现了。
#1
更多评论
啥输出都没有?感觉不应该呀! PS: defer 要放在 err 判断之后。
#2
<a href="/user/channel" title="@channel">@channel</a> ```go package main import ( &#34;net/http&#34; &#34;io/ioutil&#34; &#34;fmt&#34; &#34;time&#34; ) func fetch(ch chan string){ resp, err := http.Get(&#34;http://www.baidu.com&#34;) defer resp.Body.Close() if err != nil { panic(err) } body, err := ioutil.ReadAll(resp.Body) ch &lt;-string(body) } func main(){ ch := make(chan string) go fetch(ch) select { case rs := &lt;-ch: fmt.Printf(&#34;success\n\t-&gt;%s&#34;, rs) case &lt;-time.After(3*time.Second): fmt.Printf(&#34;failed\n\t-&gt;nil&#34;) } } ``` 改成这样了,因为 case 中读取了一次 ch,之后Printf里面又读取了一次
#3