使用Golang语言实现对指定存储桶的删除方法(下)

简介: 上一篇文章《使用Golang语言实现对指定存储桶的删除方法(上)》中介绍了删除存储桶前的校验逻辑,今天就来看一看,具体删除存储桶时的逻辑处理。通过上下两篇文章的介绍基本上就把删除存储桶的底层源码实现讲清楚了。正文我们直接进入正题,当删除存储桶时,大概需要三个层逻辑。具体情况,我们接下来单独介绍。

前言

上一篇文章《使用Golang语言实现对指定存储桶的删除方法(上)》中介绍了删除存储桶前的校验逻辑,今天就来看一看,具体删除存储桶时的逻辑处理。通过上下两篇文章的介绍基本上就把删除存储桶的底层源码实现讲清楚了。

正文

我们直接进入正题,当删除存储桶时,大概需要三个层逻辑。具体情况,我们接下来单独介绍。

第一层

存储桶中一般会包含存储的文件,我们在删除存储桶的时候,首先要删除存储的文件。我们通过查询数据库,查看当前存储桶中都包含哪些存储文件,然后根据查询结果再逐一删除。

代码实现:先调用ListObjectsV2()查询存储的文件,再调用删除接口RemoveObject()

第二层

存储桶中还有可能会包含正在上传的文件,比如大文件一般都是分片上传的,有可能正上传了一半停止了。在删除存储文件时,也要考虑删除这部分中间文件。同样,我们先查询数据库中未完成上传的记录,再根据这些查询结果删除中间的临时文件。

代码实现:先调用ListIncompleteUploads()查询未完成上传的文件,再调用删除接口RemoveIncompleteUpload

第三层

删除存储桶中所有的文件和临时文件后,就可以删除存储桶本身了。最后,删除数据库中的存储桶记录。

代码实现:调用接口RemoveBucket删除存储桶。

逻辑汇总加代码实现

定义删除方法:cleanupBucket,参数是存储桶名称,类型是字符串。具体逻辑代码实现如下:

funccleanupBucket(bucketNamestring) error {
// 创建协程doneCh :=make(chanstruct{})
// 退出后清理资源deferclose(doneCh)
// 迭代查询结果forobjCh :=rangeListObjectsV2(bucketName, "", true, doneCh) {
ifobjCh.Err!=nil {
returnobjCh.Err        }
ifobjCh.Key!="" {
// 删除存储桶中的文件err :=RemoveObject(bucketName, objCh.Key)
iferr!=nil {
returnerr            }
        }
    }
// 查询未完成上传的文件,也就我们说的中间文件、临时文件forobjPartInfo :=rangeListIncompleteUploads(bucketName, "", true, doneCh) {
ifobjPartInfo.Err!=nil {
returnobjPartInfo.Err        }
ifobjPartInfo.Key!="" {
// 删除未完成上传的文件err :=RemoveIncompleteUpload(bucketName, objPartInfo.Key)
iferr!=nil {
returnerr            }
        }
    }
// 最后,删除存储桶自己err :=RemoveBucket(bucketName)
iferr!=nil {
returnerr    }
returnerr}

好了,至此,删除存储桶的底层代码逻辑实现就介绍完了。看完了之后,是不是有很多点是自己之前所没有想到的。

结尾

通过学习删除存储桶的底层代码实现,有没有感觉像发现了新大陆。尽管平时我们自己不去实现这些代码,但是其中的思想有很多可以借鉴的地方。今天的内容就介绍完了,我是 liuzhen007, 欢迎评论留言外加“一键三连”。

题外话

今天不得不再说点别的,细心的小伙伴会发现,我这个月每天都在更新文章,而且在每篇文章的最后都会附上一个打卡截图。今天是这个月的最后一天,8月更文挑战,今天就算完成了。哈哈,特意在此记录一下。今天是一个活动的结束,也是新活动的起点,继续加油!奥力给!



作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!😄

目录
相关文章
|
7天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
41 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
27天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
38 7
|
27天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
27天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
99 71
|
26天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
104 67
|
29天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
98 62
|
1月前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
2天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
27 16
|
27天前
|
存储 Go
go语言中映射
go语言中映射
36 11
|
29天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
34 12