登录
首页 >  Golang >  Go问答

for select 里使用return一直阻塞

来源:SegmentFault

时间:2023-02-25 09:52:46 499浏览 收藏

本篇文章向大家介绍《for select 里使用return一直阻塞》,主要包括go,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

运行以下代码, monitor函数里,有中文描述处. 使用你的浏览器

http://localhost:8080/add
会一直阻塞, 为什么?大神解释下.

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "log"
    "math/rand"
    "sync"
)

type Cache struct {
    ch chan int
}
var (
    _cache *Cache
    _once sync.Once
)
func NewCache() *Cache {
    _once.Do(func() {
        _cache = &Cache{
            ch: make(chan int),
        }
        _cache.monitor()
    })
    return _cache
}
func (c *Cache) Push(x int) {
    c.ch 

正确答案

因为

return
语法会跳出整个函数调用。

你的代码中,多次调用

NewCache() 
只初始化了一个
_cache
,当你在
monitor()
使用了
return
语法,会让整个协程退出,导致
c.ch
管道没有消费。所以会阻塞请求。

理论要掌握,实操不能落!以上关于《for select 里使用return一直阻塞》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>