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

举报
liuzhen007 发表于 2021/08/26 23:21:45 2021/08/26
【摘要】 目录前言正文结尾 前言熟悉对象存储的小伙伴一定都知道存储桶的概念,各大云厂商基本上都有自己的对象存储服务,常见的有阿里云、华为云、腾讯云等。存储桶有创建和删除两个基础方法,我们也经常使用它们。那么,小伙伴们有没有考虑过一个问题,就是如果让你实现删除存储桶的方法,应该如何编码呢。 正文今天我们就来讨论一下如何实现删除存储桶的方法。说白了,就是自己编写删除存储桶的源代码。从严谨的角度的出发,我们...

目录

  • 前言
  • 正文
  • 结尾

前言

熟悉对象存储的小伙伴一定都知道存储桶的概念,各大云厂商基本上都有自己的对象存储服务,常见的有阿里云、华为云、腾讯云等。存储桶有创建和删除两个基础方法,我们也经常使用它们。那么,小伙伴们有没有考虑过一个问题,就是如果让你实现删除存储桶的方法,应该如何编码呢。

正文

今天我们就来讨论一下如何实现删除存储桶的方法。说白了,就是自己编写删除存储桶的源代码。从严谨的角度的出发,我们先拆分一下这个需求,在真正删除存储桶之前,我们先来进行逻辑校验。假设我们删除桶的校验方法有一个参数,也就是存储桶的名字,校验方法的声明如下:

func CheckBucketName(bucketName string) (err error)

校验步骤如下:

  1. 检查名称前后是否包含空格,参考代码如下:

strings.TrimSpace(bucketName) == “”

  1. 检查存储桶的名称是否过长过短,假如我们限制名称最短不能短于4个字符,最长不能超过23个字符,参考代码如下:

len(bucketName) < 4 || len(bucketName) > 23

  1. 确保存储桶名称不是IP地址,因为很多时候大家想偷懒用IP去作为存储桶的名称,这样有很多风险,所以必须限制这么做,我们可以利用第三方工具来检测名称是否为IP地址,参考代码如下:

ipAddress.MatchString(bucketName)

  1. 检查存储桶名称是否包含不可用字符,这里有两种情况,有些字符可以出现,但是必选限定次数和位置。我们可以用正则匹配方法校验是否存在非法字符,参考代码如下:

strings.Contains(bucketName, “…”) || strings.Contains(bucketName, “.-”) || strings.Contains(bucketName, “-.”) || !validBucketName.MatchString(bucketName)

完整代码如下:

// 声明包名
package utils

// 引入工具包
import (
	"regexp"
	"strings"
)

// 定义正则匹配串
var (
	validBucketName       = regexp.MustCompile(`^[A-Za-z0-9][A-Za-z0-9\.\-\_\:]{1,61}[A-Za-z0-9]$`)
	ipAddress             = regexp.MustCompile(`^(\d+\.){3}\d+$`)
)

// 名称校验方法
func checkBucketNameCommon(bucketName string, strict bool) (err error) {
	if strings.TrimSpace(bucketName) == "" {
		return errors.New("存储桶名称不能包含空格")
	}
	if len(bucketName) < 4 {
		return errors.New("存储桶名称不能少于4个字符")
	}
	if len(bucketName) > 23 {
		return errors.New("存储桶名称不能多于23个字符")
	}
	if ipAddress.MatchString(bucketName) {
		return errors.New("存储桶名称不能是IP地址")
	}
	if strings.Contains(bucketName, "..") || strings.Contains(bucketName, ".-") || strings.Contains(bucketName, "-.") {
		return errors.New("存储桶名称包含非法字符")
	}
	if !validBucketName.MatchString(bucketName) {
		err = errors.New("存储桶名称包含非法字符")
	}
	return err
}

结尾

其实,在日常工作中,我们可以多多思考底层逻辑的一些实现方法,对于自己理解对应服务的工作原理和形成好的编码习惯有很大的帮助作用。好了,这一期的内容就介绍这么多,下一期再继续介绍删除存储桶的后续逻辑和处理。晚安,我是 liuzhen007,欢迎评论留言外加一键三连。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。