你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 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 存储客户端模块列出容器,请参阅以下资源。
代码示例
- 查看本文中的代码示例 (GitHub)
REST API 操作
Azure SDK for Go 包含基于 Azure REST API 而生成的库,允许你通过熟悉的 Go 范式来与 REST API 操作进行交互。 用于列出容器的客户端库方法使用以下 REST API 操作:
- 列出容器 (REST API)
客户端模块资源
另请参阅
相关内容
- 本文是适用于 Go 的 Blob 存储开发人员指南的一部分。 若要了解详细信息,请参阅构建 Go 应用中的完整开发人员指南文章列表。