你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Go 删除和还原 Blob 容器
本文介绍如何使用适用于 Go 的 Azure 存储客户端模块删除容器。 如果已启用容器软删除,则可以还原已删除的容器。
先决条件
设置你的环境
如果没有现有项目,请查看本部分,其中介绍了如何设置项目来使用适用于 Go 的 Azure Blob 存储客户端模块。 步骤包括模块安装、添加 import
路径以及创建授权的客户端对象。 有关详细信息,请参阅 Azure Blob 存储和 Go 入门。
安装模块
使用以下命令安装 azblob 模块:
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
若要使用 Microsoft Entra ID 进行身份验证(建议),请使用以下命令安装 azidentity
模块:
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
添加导入路径
在代码文件中添加以下导入路径:
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
这些导入路径代表了开始之前需要满足的最低要求。 本文中的某些代码示例可能需要其他导入路径。 有关具体详细信息和示例用法,请参阅代码示例。
创建客户端对象
若要将应用连接到 Blob 存储,请使用 azblob.NewClient 创建客户端对象。 以下示例演示如何使用 DefaultAzureCredential
创建客户端对象进行授权:
func getServiceClientTokenCredential(accountURL string) *azblob.Client {
// Create a new service client with token credential
credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)
client, err := azblob.NewClient(accountURL, credential, nil)
handleError(err)
return client
}
授权
授权机制必须具有删除或还原容器所需的权限。 若要使用 Microsoft Entra ID 进行授权(建议),需有 Azure RBAC 内置角色“存储 Blob 数据参与者”或更高级别的角色。 有关详细信息,请参阅删除容器 (REST API) 和还原容器 (REST API) 的授权指南。
删除容器
若要删除容器,请调用以下方法:
删除容器后,至少在 30 秒内无法使用相同的名称创建容器。 尝试创建同名容器失败,并出现 HTTP 错误代码 409 (Conflict)
。 针对容器或其包含的 Blob 执行任何其他操作失败,并出现 HTTP 错误代码 404 (Not Found)
。
以下示例演示如何删除指定的容器:
func deleteContainer(client *azblob.Client, containerName string) {
// Delete the container
_, err := client.DeleteContainer(context.TODO(), containerName, nil)
handleError(err)
}
还原软删除的容器
为存储帐户启用容器软删除时,可以在指定的保留期内恢复已删除的容器及其内容。 若要详细了解容器软删除,请参阅启用和管理容器的软删除。 可以通过从客户端对象的嵌入式 ServiceClient 调用以下方法来还原软删除的容器:
以下示例列出容器(包括软删除的容器),并遍历列表以还原指定的软删除容器:
func restoreDeletedContainer(client *azblob.Client, containerName string) {
// List containers, included deleted ones
pager := client.NewListContainersPager(&azblob.ListContainersOptions{
Include: azblob.ListContainersInclude{Deleted: true},
})
for pager.More() {
resp, err := pager.NextPage(context.TODO())
handleError(err)
for _, container := range resp.ContainerItems {
if *container.Name == containerName && *container.Deleted {
// Restore the deleted container
_, err := client.ServiceClient().RestoreContainer(context.TODO(), containerName, *container.Version, nil)
handleError(err)
}
}
}
}
注意
本指南中的代码示例旨在帮助你开始使用 Azure Blob 存储和 Go。 你应该修改错误处理和 Context
值以满足应用程序的需求。
资源
若要详细了解如何使用适用于 Go 的 Azure Blob 存储客户端模块删除容器,请参阅以下资源。
代码示例
- 查看本文中的代码示例 (GitHub)
REST API 操作
Azure SDK for Go 包含基于 Azure REST API 而生成的库,允许你通过熟悉的 Go 范式来与 REST API 操作进行交互。 用于删除或还原容器的客户端库方法使用以下 REST API 操作:
客户端模块资源
另请参阅
相关内容
- 本文是适用于 Go 的 Blob 存储开发人员指南的一部分。 若要了解详细信息,请参阅构建 Go 应用中的完整开发人员指南文章列表。