首页 > 其他分享 >go并发模式 错误处理

go并发模式 错误处理

时间:2024-07-10 13:09:33浏览次数:17  
标签:res fmt 并发 博主 go 错误处理 Response

package main

import (
    "fmt"
    "net/http"
)

type Results struct {
    Error    error
    Response *http.Response
}

func main() {
    checkStatus := func(done <-chan interface{}, urls ...string) <-chan Results {
        results := make(chan Results)
        go func() {
            defer close(results)
            for _, url := range urls {
                resp, err := http.Get(url)
                result := Results{err, resp}
                select {
                case <-done:
                    return
                case results <- result:
                }
            }
        }()
        return results
    }

    urls := []string{"http://www.google.com", "http://www.bing.com", "http://www.amazon.com", "http://qq.com", "http://facebook.com"}
    done := make(chan interface{})
    defer close(done)
    errorCount := 0
    for res := range checkStatus(done, urls...) {
        if res.Error != nil {
            errorCount++
            if errorCount >= 2 {
                fmt.Println("too many errors,breaking!")
                break
            }
            fmt.Printf("error:%v\n", res.Error)
            continue
        }
        fmt.Printf("response status:%v\n", res.Response.Status)
    }
}

 【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/facetwitter/p/18293856

标签:res,fmt,并发,博主,go,错误处理,Response
From: https://www.cnblogs.com/facetwitter/p/18293856

相关文章

  • go并发模式 扇入扇出
    扇入扇出寻找素数:packagemainimport("fmt""math/rand""runtime""sync""time")varrepeatFn=func(done<-chaninterface{},fnfunc()interface{})<-chaninterface{}{valueSt......
  • AI绘画comfyui工作流,商业海报设计、Logo设计,一个comfyui工作流就能搞定!
    前言创新设计工作流:轻松打造LOGO和海报本文涉及的工作流和插件,需要的朋友请扫描免费获取哦—HAPPYNEWYEAR—大家好!今天我要分享的是一个高效且创新的设计工作流,这一工具由国外的网友无私分享,适用于LOGO设计和海报创作。这不仅是对开源精神的致敬,也为我们的设计工......
  • 【转】-Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
    Java并发编程:CountDownLatch、CyclicBarrier和Semaphore该博客转载自​Matrix海子​的​Java并发编程:CountDownLatch、CyclicBarrier和Semaphore在java1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下......
  • 【转】-并发下的集合
    高并发下的Java数据结构(List、Set、Map、Queue)本文转载至​薛勤的博客​的​高并发下的Java数据结构(List、Set、Map、Queue)由于并行程序与串行程序的不同特点,适用于串行程序的一些数据结构可能无法直接在并发环境下正常工作,这是因为这些数据结构不是线程安全的。本节将着重......
  • 【转】-Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
    Java并发编程:CountDownLatch、CyclicBarrier和Semaphore该博客转载自​Matrix海子​的​Java并发编程:CountDownLatch、CyclicBarrier和Semaphore在java1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下......
  • 【转】-Java并发之CyclicBarrier
    Java并发之CyclicBarrier​ 该博客转载自​巴蜀码哥​**的​Java并发之CyclicBarrier**barrier(屏障)与互斥量、读写锁、自旋锁不同,它不是用来保护临界区的。相反,它跟条件变量一样,是用来协同多线程一起工作的。条件变量是多线程间传递状态的改变来达到协同工作的效果。屏障是......
  • 深入理解Java中的并发编程
    深入理解Java中的并发编程大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!并发编程是Java开发中的一个重要领域,通过并发编程,可以提高程序的执行效率和资源利用率。本文将深入探讨Java中的并发编程,包括线程的创建、同步机制、并发集合、线程池和并发工具类......
  • 21、Django-缓存(强缓存和协商缓存)-@cache-page()装饰器
    定义:缓存是一类可以更快的读取数据的介质的统称、也指其它可以加快数据读取的存储方式、一般用来存储临时数据、常用介质的是读取速度很快的内存意义:视图渲染有一定的成本、数据库的频繁查询过高、所以对于低频变动的页面可以考虑使用缓存技术、减少实际渲染的次数、用户拿到相......
  • 20、Django-会话-cookie和session-2
    session是在服务器上开辟一段空间用于保留和服务器交互时的重要数据实现方式:--使用session需要在浏览器客户端启动cookie、且在cookie中存储session--每个客户端都可以在服务器端有一个独立的session--注意:不同的请求者之间不会共享这个数据、与请求者一一对应......
  • 19、Django-会话-cookie和session-1
    会话定义:--从打开浏览器访问一个网站开始到关闭浏览器为止、称之为一次会话--http协议是无状态的、导致会话状态难以保持cookie和session就是为了保持会话的技术cookies:--保存在客户端浏览器上的存储空间--查看cookie:--chrom:开发者工具-》Application-......