Enumeración de contenedores de blob con Go
Al enumerar los contenedores de una cuenta de Azure Storage desde el código, puede especificar varias opciones para administrar cómo se devuelven los resultados de Azure Storage. En este artículo se muestra cómo enumerar contenedores con el módulo cliente de Azure Storage para Go.
Requisitos previos
- Una suscripción a Azure: cree una cuenta gratuita
- Una cuenta de Azure Storage: cree una cuenta de almacenamiento
- Go 1.18+
Configurar el entorno
Si no tiene un proyecto existente, esta sección muestra cómo configurar un proyecto para trabajar con el módulo cliente Azure Blob Storage para Go. Los pasos incluyen la instalación del módulo, la adición de rutas de acceso de import
y la creación de un objeto de cliente autorizado. Para obtener información, consulte Introducción a Azure Blob Storage y Go.
Módulos de instalación
Instale el módulo azblob mediante el siguiente comando:
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Para autenticarse con Microsoft Entra ID (recomendado), instale el módulo azidentity
mediante el siguiente comando:
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Agregar rutas de importación
En el archivo de código, agregue las rutas de importación siguientes:
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
Estas rutas de importación representan el mínimo necesario para empezar. Algunos ejemplos de código de este artículo pueden requerir rutas de importación adicionales. Para obtener detalles específicos y ejemplos de uso, consulte Ejemplos de código.
Creación de un objeto de cliente
Para conectar una aplicación a Blob Storage, cree un objeto de cliente mediante azblob.NewClient. En el ejemplo siguiente se muestra cómo crear un objeto de cliente mediante DefaultAzureCredential
para la autorización:
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
}
Authorization
El mecanismo de autorización debe tener los permisos necesarios para enumerar contenedores de blobs. Para la autorización con Microsoft Entra ID (recomendado) se necesita el rol integrado de RBAC de Azure de Colaborador de datos de Storage Blob o superior. Para obtener más información, consulte la guía de autorización para Contenedores de lista (API de REST).
Acerca de las opciones de listado de contenedores
Al enumerar blobs desde el código, puede especificar opciones para administrar cómo se devuelven los resultados de Azure Storage. Puede especificar el número de resultados que se van a devolver en cada conjunto de resultados y luego recuperar los conjuntos subsiguientes. También puede filtrar los resultados por un prefijo y devolver metadatos de contenedor con los resultados. Estas opciones se describen en las secciones siguientes.
Para enumerar los contenedores de la cuenta de almacenamiento, llame al método siguiente:
Este método devuelve un Pager, que permite que la aplicación procese una página de resultados a la vez. Los contenedores se ordenan lexicográficamente por nombre.
Puede especificar opciones para enumerar contenedores mediante la estructura ListContainersOptions. Esta estructura incluye campos para administrar el número de resultados, filtrar por prefijo e incluir información de contenedor mediante ListContainersInclude.
Administración del número de resultados que se devuelven
De forma predeterminada, una operación de enumeración devuelve hasta 5000 resultados a la vez. Para devolver un conjunto de resultados más pequeño, proporcione un valor distinto de cero para el campo MaxResults
en la estructura ListContainersOptions.
Filtrado de los resultados con un prefijo
Para filtrar la lista de contenedores, especifique una cadena o un carácter para el campo Prefix
en ListContainersOptions. La cadena de prefijo puede incluir uno o varios caracteres. Después, Azure Storage solo devuelve los contenedores cuyos nombres empiecen por ese prefijo.
Incluir metadatos de contenedor
Para incluir metadatos de contenedor con los resultados, establezca el campo Metadata
en true
como parte de ListContainersInclude. Azure Storage incluye metadatos con cada contenedor devuelto, por lo que no es necesario capturar también los metadatos del contenedor.
Incluir contenedores eliminados
Para incluir contenedores eliminados temporalmente con los resultados, establezca el campo Deleted
en true
como parte de ListContainersInclude.
Ejemplos de código
En el ejemplo siguiente se enumeran todos los contenedores y los metadatos:
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)
}
}
}
}
En el ejemplo siguiente se enumeran solo los contenedores que comienzan con el prefijo especificado:
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)
}
}
}
También puede especificar un límite para el número de resultados por página. En este ejemplo se pasa un valor para MaxResults
y se paginan los resultados:
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)
}
}
}
Nota:
Los ejemplos de código de esta guía están diseñados para ayudarle a empezar a trabajar con Azure Blob Storage y Go. Debe modificar el control de errores y los valores de Context
para satisfacer las necesidades de la aplicación.
Recursos
Para más información sobre cómo crear listas de contenedores con el módulo cliente de Azure Blob Storage para Go, consulte los recursos siguientes.
Ejemplos de código
- Visualización de ejemplos de código de este artículo (GitHub)
Operaciones de API REST
Azure SDK para Go contiene bibliotecas que se crean a partir de la API de REST de Azure, lo que le permite interactuar con las operaciones de API de REST a través de paradigmas conocidos de Go. Los métodos de la biblioteca cliente para crear listas de contenedores usan esta operación de API de REST:
- List Containers (API REST)
Recursos del módulo cliente
- Documentación de referencia del módulo cliente
- Código fuente del módulo cliente
- Paquete (pkg.go.dev)
Consulte también
Contenido relacionado
- Este artículo forma parte de la guía para desarrolladores de Blob Storage para Go. Para obtener más información, consulte la lista completa de artículos de la guía para desarrolladores en Compilación de la aplicación Go.