使用 Go 列出 Blob 容器

通过代码列出 Azure 存储帐户中的容器时,可以指定多个选项来管理如何从 Azure 存储返回结果。 本文介绍如何使用适用于 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
}

授权

授权机制必须具有列出 Blob 容器所需的权限。 若要使用 Microsoft Entra ID 进行授权(建议),需有 Azure RBAC 内置角色“存储 Blob 数据参与者”或更高级别的角色。 有关详细信息,请参阅列出容器 (REST API) 的授权指南。

关于容器列出选项

通过代码列出容器时,可以指定选项来管理如何从 Azure 存储返回结果。 可以指定要在每个结果集中返回的结果数,然后检索后续结果集。 还可以按前缀筛选结果,并将容器元数据与结果一起返回。 后续部分将介绍这些选项。

若要列出存储帐户中的容器,请调用以下方法:

此方法返回一个分页器,使应用能够每次处理一页结果。 容器按名称的字典顺序排序。

可以使用 ListContainersOptions 结构指定列出容器的选项。 该结构包含用于管理结果数量、按前缀筛选以及使用 ListContainersInclude 包含容器信息的字段。

管理要返回的结果数

默认情况下,列出操作每次最多返回 5,000 条结果。 若要返回更少的一组结果,请为 ListContainersOptions 结构中的 MaxResults 字段提供非零值。

使用前缀筛选结果

若要筛选容器列表,请为 ListContainersOptions 中的 Prefix 字段指定字符串或字符。 前缀字符串可以包含一个或多个字符。 然后,Azure 存储只返回其名称以该前缀开头的容器。

包含容器元数据

若要将容器元数据包含在结果中,请将 ListContainersInclude 中的 Metadata 字段设置为 true。 Azure 存储包含返回的每个容器的元数据,因此你不需要单独提取容器元数据。

包含已删除的容器

若要将软删除的容器包含在结果中,请将 ListContainersInclude 中的 Deleted 字段设置为 true

代码示例

以下示例列出所有容器和元数据:

func listContainers(client *azblob.Client) {
    // List the containers in the storage account and include metadata
    pager := client.NewListContainersPager(&azblob.ListContainersOptions{
        Include: azblob.ListContainersInclude{Metadata: true},
    })

    for pager.More() {
        resp, err := pager.NextPage(context.TODO())
        handleError(err)

        for _, container := range resp.ContainerItems {
            fmt.Println(*container.Name)
            for k, v := range container.Metadata {
                fmt.Printf("%v: %v\n", k, *v)
            }
        }
    }
}

以下示例仅列出以指定前缀开头的容器:

func listContainersWithPrefix(client *azblob.Client, prefix string) {
    // List the containers in the storage account with a prefix
    pager := client.NewListContainersPager(&azblob.ListContainersOptions{
        Prefix: &prefix,
    })

    for pager.More() {
        resp, err := pager.NextPage(context.TODO())
        handleError(err)

        for _, container := range resp.ContainerItems {
            fmt.Println(*container.Name)
        }
    }
}

你还可以指定每页结果数限制。 此示例传入 MaxResults 的值并对结果进行分页:

func listContainersWithMaxResults(client *azblob.Client, maxResults int32) {
    // List the containers in the storage account with a maximum number of results
    pager := client.NewListContainersPager(&azblob.ListContainersOptions{
        MaxResults: &maxResults,
    })

    i := 0
    for pager.More() {
        resp, err := pager.NextPage(context.TODO())
        handleError(err)

        // Show page number to demonstrate pagination with max results
        i++
        fmt.Printf("Page %d:\n", i)

        for _, container := range resp.ContainerItems {
            fmt.Println(*container.Name)
        }
    }
}

注意

本指南中的代码示例旨在帮助你开始使用 Azure Blob 存储和 Go。 你应该修改错误处理和 Context 值以满足应用程序的需求。

资源

若要详细了解如何使用适用于 Go 的 Azure Blob 存储客户端模块列出容器,请参阅以下资源。

代码示例

REST API 操作

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

客户端模块资源

另请参阅