登录
首页 >  Golang >  Go问答

使用通道超时

来源:Golang技术栈

时间:2023-03-21 15:29:58 239浏览 收藏

本篇文章向大家介绍《使用通道超时》,主要包括golang,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我正在使用 goroutines/channels 来检查 url 列表是否可以访问。这是我的代码。这似乎总是返回 true。为什么超时情况没有得到执行?目标是即使其中一个 url 不可访问也返回 false

import "fmt"
import "time"

func check(u string) bool {
    time.Sleep(4 * time.Second)
    return true
}

func IsReachable(urls []string) bool {

    ch := make(chan bool, 1)
    for _, url := range urls {
        go func(u string) {
            select {
            case ch 

正确答案

check(u) 将在当前 的 goroutine中休眠,即正在运行的 goroutine func。该select语句只有在返回后才能正常运行,到那时,两个分支都可以运行,运行时可以选择它喜欢的任何一个。

check您可以通过在另一个 goroutine中运行来解决它:

package main

import "fmt"
import "time"

func check(u string, checked chan

您似乎想检查一组 URL 的可访问性,如果其中一个可用,则返回 true。如果与启动 goroutine 所需的时间相比,超时时间较长,则可以通过为所有 URL 一起设置一个超时来简化此操作。但是我们需要确保通道足够大以容纳所有检查的答案,否则那些没有“获胜”的将永远阻塞:

package main

import "fmt"
import "time"

func check(u string, ch chan

以上就是《使用通道超时》的详细内容,更多关于golang的资料请关注golang学习网公众号!

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