返回顶部
首页 > 资讯 > 后端开发 > GO >Golang 通道传输
  • 251
分享到

Golang 通道传输

2024-04-04 23:04:21 251人浏览 泡泡鱼
摘要

编程网今天将给大家带来《golang 通道传输》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~

编程网今天将给大家带来《golang 通道传输》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

我对 golang 比较陌生,并不完全理解流。我有一个正在进行 rest 调用的函数(断路器函数)。我让它工作,但它只是流回“responsebody”。我实际上想将主体和标头一起流回流的整个请求。

当我尝试在“标头”上使用类似的方法时,我收到一个错误,表明标头不可流式传输。

有没有一个好的/最好的方法来实现这个目标?谢谢。以下是我的功能。

func CallWithRetries(req *Http.Request, output chan []byte) error {
    r := retrier.New(retrier.ConstantBackoff(RETRIES, 100 * time.Millisecond), nil)
    attempt := 0
    err := r.Run(func() error {
        attempt++
        resp, err := Client.Do(req)
        if err == nil && resp.StatusCode < 299 {
            responseBody, err := ioutil.ReadAll(resp.Body)
            if err == nil {
                output <- responseBody
                return err
            }
            return err
        } else if err == nil {
            customLogger.LogDebug("Status code was: " , transactionId)
            err = fmt.Errorf("Status was %v", resp.StatusCode)
        }
        return err
    })
    return err
}


解决方案


您正在寻找 httputil.DumpResponse 函数。

代码可能会更改为类似的内容

func callwithretries(req *http.request, output chan []byte) error {
    r := retrier.new(retrier.constantbackoff(retries, 100*time.millisecond), nil)
    attempt := 0
    err := r.run(func() error {
        attempt++
        resp, err := client.do(req)
        if err == nil && resp.statuscode < 299 {
            dump, err := httputil.dumpresponse(resp, true)
            if err == nil {
                output <- dump
                return err
            }
            return err
        } else if err == nil {
            customlogger.logdebug("status code was: ", transactionid)
            err = fmt.errorf("status was %v", resp.statuscode)
        }
        return err
    })
    return err
}

旁注,

  • 您可能需要考虑关闭响应正文,如文档 https://golang.org/pkg/net/http/#Client.Get 中所述

  • 看起来 err 变量被隐藏,应该修改它以避免任何意外。

此版本的代码尝试尽早返回错误,并关闭响应正文。它没有经过测试,只是临时编写的,请小心使用。

func CallWithRetries(req *http.Request, output chan []byte) error {
    r := retrier.New(retrier.ConstantBackoff(RETRIES, 100*time.Millisecond), nil)
    attempt := 0
    return r.Run(func() error {
        attempt++
        var resp *http.Response
        {
            r, err := Client.Do(req)
            if err != nil {
                return err
            }
            defer r.Body.Close()
            if resp.StatusCode > 299 {
                customLogger.LogDebug("Status code was: ", transactionId)
                return fmt.Errorf("Status was %v", resp.StatusCode)
            }
            resp = r
        }
        var out []byte
        {
            x, err := httputil.DumpResponse(resp, true)
            if err != nil {
                return err
            }
            out = x
        }
        output <- out
        return nil
    })
}

本篇关于《Golang 通道传输》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注编程网公众号!

您可能感兴趣的文档:

--结束END--

本文标题: Golang 通道传输

本文链接: https://lsjlt.com/news/595848.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Golang 通道传输
    编程网今天将给大家带来《Golang 通道传输》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~...
    99+
    2024-04-04
  • 如何通过JAVA NIO通道传输拷贝文件
    这篇文章给大家分享的是有关如何通过JAVA NIO通道传输拷贝文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。通过JAVA NIO 通道传输拷贝文件方式一   public&nbs...
    99+
    2023-06-17
  • golang函数通道作为参数传递
    在 go 中,我们可以使用 chan 关键字将函数通道作为函数参数传递,从而轻松地在函数之间共享和传递数据。具体操作步骤如下:创建一个通道来传递特定类型的数据。在函数中使用 chan 关...
    99+
    2024-04-22
    函数 通道 golang
  • WCF通道网络传输技术是什么
    这篇文章主要介绍“WCF通道网络传输技术是什么”,在日常操作中,相信很多人在WCF通道网络传输技术是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”WCF通道网络传输技术是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • golang 通道关闭
    golang 通道关闭Go是一种受欢迎的编程语言,特别适合用来编写网络应用程序和高并发应用程序。其中,通道是一种Go语言中十分重要的并发机制,它旨在实现多个goroutine之间的安全通信和同步。在使用通道时,通道的关闭是一个常见的操作。为...
    99+
    2023-05-16
  • golang函数通过管道传递参数的详解
    在 go 中,可以将函数作为参数通过管道传递,实现步骤如下:定义接收函数的 goroutine。在调用端 goroutine 中,创建管道并向其发送函数。 Go 中通过管道传递函数参数...
    99+
    2024-05-05
    管道 参数传递 golang
  • golang 通道不关闭
    在Golang中,通道是一种非常有用的数据结构,可以在协程之间安全地传递数据。一个通道可以被关闭,以让接收方知道数据已经全部传递完毕。然而,在某些情况下,不关闭通道可能是更好的选择。首先,让我们看一下为什么关闭通道可能有帮助。当我们发送数据...
    99+
    2023-05-15
  • golang怎么关闭通道
    Golang是一门流行的编程语言,专注于处理并发。在Golang中,通道是一种重要的并发机制,用于在不同的goroutine之间进行有效的通信。通道可以用于发送和接收数据,并且具有一些其他非常有用的功能。在使用Golang的通道时,开发人员...
    99+
    2023-05-14
  • 浅谈golang通道类型
    目录一、什么是通道类型二、通道产生的原因三、声明channel四、创建channel五、channel相关操作1、发送值2、接收值3、关闭通道六、通道类型1、无缓冲通道2、有缓冲通道...
    99+
    2023-02-14
    golang 通道类型 golang 通道
  • golang如何将通道关闭
    本篇内容主要讲解“golang如何将通道关闭”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“golang如何将通道关闭”吧!在golang中,可以使用close()函数来关闭通道,语法“close...
    99+
    2023-07-05
  • golang怎么关闭channal(通道)
    Golang是一个高效、强类型、并发支持的编程语言,其中的channel作为Golang的并发编程机制之一,有着非常重要的作用。在使用channel时,为了保证程序的健壮性和性能,合理地使用channel的关闭机制十分重要。本文将介绍Gol...
    99+
    2023-05-14
  • 我不太了解 golang 通道
    在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天编程网就整理分享《我不太了解 golang 通道》,聊聊,希...
    99+
    2024-04-04
  • golang 关闭通道怎么实现
    Golang是一种流行的高效编程语言,它的并发特性是该语言最大的特点之一。在Golang中,通道(channel)是一种重要的并发原语,它是一种可以在两个或多个goroutines之间传递数据的对象。在使用通道时,关闭通道是一种常见的操作。...
    99+
    2023-05-14
    Golang
  • Golang通道channel的源码分析
    目录前言channel基础结构channel初始化channel发送channel接收小结前言 channel是golang中标志性的概念之一,很好很强大! channel(通道),...
    99+
    2022-12-08
    Golang通道channel Golang通道 Golang channel
  • Golang - 如何合并多个通道?
    怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面编程网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《Golang - 如何合并多个通道...
    99+
    2024-04-04
  • Golang实现文件传输功能
    本文实例为大家分享了Golang实现文件传输的具体代码,供大家参考,具体内容如下 借助TCP完成文件的传输,基本思路如下: 1、发送方(客户端)向服务端发送文件名,服务端保存该文件名...
    99+
    2024-04-02
  • 通过对通道进行多次写入来理解 golang 阻塞通道行为
    php小编柚子在这篇文章中将向大家介绍如何通过对通道进行多次写入来理解 golang 阻塞通道的行为。在golang中,通道是一种用于在协程之间传递数据的重要机制。当通道已满时,写入操...
    99+
    2024-02-09
    golang开发
  • golang 如何正确地关闭通道
    Golang是近年来开发人员中越来越流行的编程语言。它提供了许多方便的特性,其中一个就是通道(Channel)。通道是Golang中用于协程(Goroutine)之间通信的一种机制。通道的优点是可以保证数据交换的原子性,并且可以在多个协程之...
    99+
    2023-05-14
  • Golang通道channel使用源码分析
    这篇文章主要介绍了Golang通道channel使用源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang通道channel使用源码分析文章都会有所收获,下面我们一起来看看吧。前言channel是g...
    99+
    2023-07-04
  • golang redis中Pipeline通道如何使用
    本文小编为大家详细介绍“golang redis中Pipeline通道如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang redis中Pipeline通道如何使用”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作