使用 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 儲存體傳回結果的方式。 您可指定要在每一組結果中傳回的結果數目,然後擷取後續集合。 您也可以按前置詞篩選結果,在結果中傳回容器中繼資料。 下列各節描述這些選項。
若要列出儲存體帳戶中的容器,請呼叫下列方法:
這個方法會傳回 Pager,這可讓您的應用程式一次處理一頁的結果。 容器會依名稱按字典順序排序。
您可以使用 ListContainersOptions 結構來指定列出容器的選項。 此結構包含用來管理結果數目、依前置詞篩選,以及使用 ListContainersInclude 包含容器資訊的欄位。
管理傳回的結果數目
根據預設,清單作業一次最多會傳回 5000 個結果。 若要傳回較小的一組結果,請為 ListContainersOptions 結構中的 MaxResults
欄位提供非零值。
使用前置詞篩選結果
若要篩選容器清單,請在 ListContainersOptions 中指定 Prefix
欄位的字串或字元。 前置詞字串可包含一或多個字元。 Azure 儲存體接著只會傳回名稱開頭為該前置詞的容器。
包含容器中繼資料
若要包含具有結果的容器中繼資料,請將 Metadata
欄位設定為 true
,以作為 ListContainersInclude 的一部分。 Azure 儲存體包含中繼資料與每個傳回的容器,因此您無須個別擷取容器中繼資料。
包含已刪除的容器
若要包含具有結果的虛刪除容器,請將 Deleted
欄位設定為 true
,以作為 ListContainersInclude 的一部分。
程式碼範例
下列範例會列出所有容器和中繼資料:
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 操作
適用於 Go 的 Azure SDK 包含建置在 Azure REST API 之上的程式庫,可讓您透過熟悉的 Go 典範與 REST API 作業進行互動。 用來列出容器的用戶端程式庫方法會使用下列 REST API 作業:
- 列出容器 (REST API)
用戶端模組資源
另請參閱
相關內容
- 本文是適用於 Go 的 Blob 儲存體開發人員指南的一部分。 若要深入了解,請參閱位於建置 Go 應用程式的完整開發人員指南文章清單。