Golang 文件上传下载并发控制示例

使用带缓冲channel控制并发,通过信号量限制最大goroutine数,避免资源耗尽。示例中以5个并发为限,封装ConcurrencyLimiter实现上传下载任务的可控执行,确保高并发下系统稳定。

golang 文件上传下载并发控制示例

在使用 Golang 实现文件上传和下载服务时,面对高并发场景,如果不加以控制,可能会导致内存暴涨、句柄耗尽或服务器负载过高。因此,引入并发控制机制非常必要。下面是一个简单实用的示例,展示如何通过带缓冲的 channel 控制最大并发数,适用于文件上传和下载场景。

1. 并发控制基本思路

使用一个带缓冲的 channel 作为信号量,限制同时运行的 goroutine 数量。每开始一个上传或下载任务前,先从 channel 获取一个“许可”,任务完成后释放它。

示例:最大并发数为 5

var semaphore = make(chan struct{}, 5) // 最多允许 5 个并发

func acquire() { semaphore <- struct{}{} }func release() { <-semaphore }

2. 文件下载的并发控制

以下是一个受控并发的文件下载函数示例:

立即学习“go语言免费学习笔记(深入)”;

func downloadFile(url, filename string) error {    acquire()    defer release()
resp, err := http.Get(url)if err != nil {    return err}defer resp.Body.Close()out, err := os.Create(filename)if err != nil {    return err}defer out.Close()_, err = io.Copy(out, resp.Body)return err

}

启动多个下载任务时,超出并发限制的任务会自动等待:

青鸟内测(手机app封装、托管系统) 青鸟内测(手机app封装、托管系统)

注意:请在linux环境下测试或生产使用 青鸟内测是一个移动应用分发系统,支持安卓苹果应用上传与下载,并且还能快捷封装网址为应用。应用内测分发:一键上传APP应用包,自动生成下载链接和二维码,方便用户内测下载。应用封装:一键即可生成app,无需写代码,可视化编辑、 直接拖拽组件制作页面的高效平台。工具箱:安卓证书生成、提取UDID、Plist文件在线制作、IOS封装、APP图标在线制作APP分发:

青鸟内测(手机app封装、托管系统) 0 查看详情 青鸟内测(手机app封装、托管系统)

urls := []string{    "https://example.com/file1.zip",    "https://example.com/file2.zip",    // ...}

var wg sync.WaitGroupfor i, url := range urls {wg.Add(1)go func(u string, idx int) {defer wg.Done()err := downloadFile(u, fmt.Sprintf("file_%d.zip", idx))if err != nil {log.Printf("下载失败 %s: %v", u, err)} else {log.Printf("下载完成: %s", u)}}(url, i)}wg.Wait()

3. 文件上传的并发控制

上传逻辑类似,只是方向相反。以下是一个 multipart 文件上传并受并发控制的例子:

func uploadFile(filepath, url string) error {    acquire()    defer release()
file, err := os.Open(filepath)if err != nil {    return err}defer file.Close()body := &bytes.Buffer{}writer := multipart.NewWriter(body)part, _ := writer.CreateFormFile("upload", filepath)io.Copy(part, file)writer.Close()req, _ := http.NewRequest("POST", url, body)req.Header.Set("Content-Type", writer.FormDataContentType())client := &http.Client{}resp, err := client.Do(req)if resp != nil {    defer resp.Body.Close()}return err

}

同样地,使用 WaitGroup 控制多个上传任务:

files := []string{"a.pdf", "b.pdf", "c.pdf"}for _, f := range files {    wg.Add(1)    go func(fpath string) {        defer wg.Done()        err := uploadFile(fpath, "https://example.com/upload")        if err != nil {            log.Printf("上传失败 %s: %v", fpath, err)        }    }(f)}wg.Wait()

4. 可复用的并发控制器

为了更灵活,可以封装一个通用的并发任务执行器:

type ConcurrencyLimiter struct {    sem chan struct{}}

func NewConcurrencyLimiter(n int) *ConcurrencyLimiter {return &ConcurrencyLimiter{sem: make(chan struct{}, n),}}

func (l *ConcurrencyLimiter) Run(task func()) {l.sem <- struct{}{}go func() {defer func() { <-l.sem }()task()}()}

使用方式:

limiter := NewConcurrencyLimiter(5)

for _, url := range urls {limiter.Run(func() {downloadFile(url, "local_file")})}

基本上就这些。通过 channel 控制并发是一种简洁高效的方式,适用于上传、下载、爬虫等 I/O 密集型任务。关键是避免无限制地启动 goroutine,防止系统资源被耗尽。

以上就是Golang 文件上传下载并发控制示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1121038.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 15:04:20
下一篇 2025年12月2日 15:04:59

相关推荐

  • 震惊加密货币市场的神秘做空者澄清:不认识川普没有内幕交易

    近日,一名被加密社区称为“神秘做空者”的交易员引发热议。其精准做空数亿美元比特币与相关Meme币的操作,被部分网友怀疑与川普团队的内幕消息有关。面对舆论压力,该交易员今日在社交平台公开回应,称“我不认识川普,也没有任何内幕消息”。 事件回顾:精准做空引发猜测 本次风波起因于10月初的一系列精准操作。…

    2025年12月9日
    000
  • 币安交易所 APP 官方版下载(安卓+iOS 双端)

    Binance币安 欧易OKX ️ Huobi火币️ 要下载币安交易所的官方APP,最核心的原则是确保来源绝对安全,避免访问钓鱼网站或下载仿冒应用。直接通过官方渠道获取是唯一推荐的方式。 如何安全下载币安官方APP 币安作为全球知名的数字资产交易平台,其官方APP支持安卓和iOS双端。为保障你的账户…

    2025年12月9日
    000
  • 怎么查询虚拟币转账记录?一份全链路的详细指南

    首先通过交易平台查询虚拟币转账记录,登录账户后在交易或充提记录页面筛选查看;若需链上信息,则使用区块链浏览器输入TxID、地址等查询,获取区块高度、确认数等详情;跨链交易需分别查询源链与目标链,并借助桥接工具跟踪进度;遇到问题时核对TxID、网络及地址准确性,必要时联系客服。 对于初次接触或不熟悉数…

    2025年12月9日
    000
  • 火币交易所正版 APP 下载教程 + 使用指南

    Binance币安 欧易OKX ️ Huobi火币️ 火币(现品牌为HTX)是全球知名的数字资产交易平台,提供安全、稳定的交易服务。下载其正版APP是开始交易的第一步,关键在于通过官方渠道获取,避免下载到仿冒应用造成资产损失。下面介绍正确的下载和基础使用方法。 如何安全下载火币HTX官方APP 确保…

    2025年12月9日
    000
  • 欧易 OKX 新手入门指南(注册+入口)

    Binance币安 欧易OKX ️ Huobi火币️ 刚接触欧易 OKX 想快速上手?注册和找到正确入口是第一步。平台操作整体流畅,界面支持中文,适合新手逐步熟悉数字货币交易。下面带你一步步完成注册并了解常用入口位置。 如何注册欧易 OKID 账号 打开欧易 OKX 官网或下载官方 App,点击“注…

    2025年12月9日
    000
  • 比特币反弹后市场趋谨慎,鲸鱼大额做空,GameFi 板块领涨

    比特币(BTC)在经历短暂反弹后,市场整体情绪趋于谨慎。大型鲸鱼账户开始出现大额做空迹象,表明资金对短期行情仍保持防御态度。然而,与此同时,GameFi 板块逆势领涨,成为今日市场的亮点。 市场行情概况 当前比特币价格在11.1 万美元附近波动,部分主流资金选择观望。以太坊与索拉纳等主流币种涨幅有限…

    2025年12月9日
    000
  • 火币官网打不开?2025 最新入口分享

    Binance币安 欧易OKX ️ Huobi火币️ 火币官网打不开是很多用户常遇到的问题,主要原因包括网络环境限制、地区监管政策以及品牌更名带来的混淆。自2023年9月起,原“火币”(Huobi)已正式升级为全新品牌“HTX”,官网也同步更换。因此,访问旧链接可能会失效或跳转异常。 确认正确官网地…

    2025年12月9日
    000
  • 币安App官方下载 (安卓/iOS最新版v3.5.0)

    Binance币安 欧易OKX Huobi火币 为了保障您的资产安全并获得最佳交易体验,下载并安装币安官方App至关重要。本文将为您提供安卓(Android)与苹果(iOS)最新版v3.5.0的官方下载指南,帮助您避开第三方钓鱼应用和恶意软件的风险。 官方App下载渠道指引 获取官方正版的币安App…

    2025年12月9日
    000
  • 2025币安Binance官网注册链接 (官方认证/邀请码福利)

    Binance币安 欧易OKX Huobi火币 进入2025年,选择一个安全可靠的平台开启您的数字资产之旅至关重要。币安(Binance)作为全球领先的交易平台,其官方注册链接是您安全入门的第一道保障。本文将提供经过官方认证的注册指引,并详细解读如何通过邀请码获取专属新手福利。 2025币安官方注册…

    2025年12月9日
    000
  • 精准把握市场脉搏!10大比特币实时价格APP全新评测

    在瞬息万变的加密货币市场,实时掌握比特币价格是做出明智决策的关键。本文将为您全面评测市面上最顶尖的10款比特币实时价格app,帮助您找到最适合自己需求的工具,精准把握每一个投资机会。 比特币实时价格APP排行榜 以下是我们根据数据实时性、功能全面性、用户体验和市场影响力综合评选出的十大APP。 1.…

    2025年12月9日
    000
  • 2025年最受好评的10款比特币实时行情工具

    在快节奏的加密货币市场,实时、准确的行情数据是做出明智决策的关键。无论是资深交易员还是新手投资者,选择一款强大的行情工具都至关重要。本文为您精选了2025年最受市场好评的10款比特币实时行情工具,它们在数据深度、图表功能和用户体验方面各有千秋。 2025年十大比特币行情工具推荐 1、币安 (Bina…

    2025年12月9日
    000
  • 2025年加密货币空投新趋势:积分空投与代币经济模型解析

    Binance币安 欧易OKX ️ Huobi火币️ 2025年,加密货币空投已经不再是简单的“发钱”活动。项目方为了筛选真实用户、防止机器人和女巫攻击,同时激励长期生态参与,普遍转向了更精细化的策略——积分空投与精心设计的代币经济模型成为主流。 积分空投:从机械交互到深度参与 过去的空投模式依赖用…

    2025年12月9日
    000
  • 加密货币是怎么赚钱的?币圈10种常见的赚钱方式

    Binance币安 欧易OKX ️ Huobi火币️ 加密货币赚钱的核心是利用技术、市场波动和项目激励来获取收益。以下10种方式覆盖了从新手到进阶的不同路径,各有特点和适用人群。 空投与任务奖励 这是成本最低的入门方式。项目方为了推广新链或应用,会向早期用户免费发放代币。你只需要用钱 包参与测试网交…

    2025年12月9日
    000
  • 币圈自保指南:2025年十大加密货币社交工程骗局及防范介绍

    Binance币安 欧易OKX ️ Huobi火币️ 2025年,加密货币领域的社交工程骗局持续升级,攻击者不再只盯着代码漏洞,而是精准利用人性弱点。这些骗局往往发生在Discord、Telegram或X等社群中,通过伪装身份、建立信任后诱导用户操作钱 包或泄露信息。了解最新套路并建立防御习惯,是保…

    2025年12月9日
    000
  • 空投是什么意思?加密货币空投类型分析

    Binance币安 欧易OKX ️ Huobi火币️ 空投在加密货币领域指的是项目方免费向用户钱 包地址发放代币的行为。这并非随机撒钱,而是一种有明确目标的策略。项目通过空投来推广新代币、快速建立活跃的社区,并奖励早期参与者,以此激励网络效应和用户增长。理解其运作机制和潜在风险,是参与的前提。 常见…

    2025年12月9日
    000
  • 加密货币空投是什么?一文看懂如何获得加密货币空投!

    Binance币安 欧易OKX ️ Huobi火币️ 加密货币空投,简单说就是项目方免费向用户钱 包发送代币。这不仅是“天上掉馅饼”,更是项目推广、回馈早期支持者的重要手段。搞懂它,普通人也有机会低成本参与新项目。 空投的本质与目的 空投是区块链项目为了快速建立社区、提升知名度而采取的营销策略。项目…

    2025年12月9日
    000
  • Yei Finance(CLO)币是什么?值得投资吗?CLO代币经济与空投领取指南

    目录 Yei Finance (CLO) 最新动态Yei Finance是什么产品定位Yei Finance核心模块YeiBridge:跨链入账与结算YeiLend:借贷和流动性协调YeiSwap:交易和做市产品用途及路径典型的用户旅程预存款和积分生态系统进展和交易里程碑上市及衍生品社区和外部消息传…

    2025年12月9日
    000
  • 恐惧与贪婪指数:从 CNN 起源到加密市场,一文介绍

    目录 恐惧与贪婪指数衡量的是什么?恐惧与贪婪指数的起源:股市版本恐惧与贪婪指数:加密货币恐惧与贪婪指数的刻度运作方式指数的组成与计算方法作为逆向信号解读指数历史价格相关性与市场里程碑近期市场动态与社交媒体趋势恐惧与贪婪指数时间线交易者使用恐惧与贪婪指数的原因需要注意的重要局限将指数纳入交易策略加密市…

    2025年12月9日 好文分享
    000
  • 稳定币市场动态分析:监管趋严与市场震荡中的新机遇

    截至2025年10月,稳定币总市值正式突破3000亿美元,相较年初增幅接近50%,标志着其在全球金融生态中的地位进一步提升。然而,伴随规模扩张而来的是监管趋严与市场波动的双重压力。 美国于2025年7月通过《GENIUS法案》(68票支持,30票反对),为美元支付型稳定币设立联邦层面的监管标准,要求…

    2025年12月9日
    000
  • 比特币的最小单位:聪

    你是否曾好奇,当我们在谈论比特币(bitcoin)这种颠覆性数字货币时,它最小的组成部分究竟是什么?人们常说比特币昂贵,动辄数万甚至数十万美元一枚,这让许多人望而却步,认为参与比特币投资需要巨额资金。但事实真的如此吗?今天,我们就将深入探索比特币的“细胞”——那个被称为“聪”(satoshi)的最小…

    好文分享 2025年12月9日
    000

发表回复

登录后才能评论
关注微信