使用 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 存储客户端模块删除容器,请参阅以下资源。

代码示例

REST API 操作

Azure SDK for Go 包含基于 Azure REST API 而生成的库,允许你通过熟悉的 Go 范式来与 REST API 操作进行交互。 用于删除或还原容器的客户端库方法使用以下 REST API 操作:

客户端模块资源

另请参阅

  • 本文是适用于 Go 的 Blob 存储开发人员指南的一部分。 若要了解详细信息,请参阅构建 Go 应用中的完整开发人员指南文章列表。