共用方式為


使用 Go 管理容器屬性和元數據

除了包含的資料之外,Blob 容器還支援系統屬性和使用者定義的中繼資料。 本文說明如何使用適用於 GoAzure 儲存體 用戶端模組來管理系統屬性和使用者定義元數據。

必要條件

設定您的環境

如果您沒有現有的專案,本節說明如何設定專案以使用適用於 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 數據讀取器或更新版本的取得作業,以及設定作業的記憶體 Blob 數據參與者或更高版本。 若要深入瞭解,請參閱取得容器屬性 (REST API)、設定容器元數據 (REST API) 或取得容器元數據 (REST API)授權指引。

關於屬性和中繼資料

  • 系統屬性:系統屬性存在於每個 Blob 儲存體資源上。 其中一些可以讀取或設定,另一些則是唯讀的。 有些系統屬性會在幕後對應至特定的標準 HTTP 標頭。 適用於 Go 的 Azure 儲存體 用戶端連結庫會為您維護這些屬性。

  • 使用者定義的中繼資料:使用者定義的中繼資料是由您為 Blob 儲存體資源所指定一或多個成對的名稱和數值所組成。 您可以使用中繼資料來儲存資源的額外值。 中繼資料值僅供您自己使用,並不會影響資源的運作方式。

    中繼資料名稱/值組是有效的 HTTP 標頭,所以應該遵守控管 HTTP 標頭的所有限制。 如需中繼資料命名需求的詳細資訊,請參閱中繼資料名稱

擷取容器屬性

若要擷取容器屬性,請從容器客戶端物件呼叫下列方法:

下列程式代碼範例會擷取容器的系統屬性,並將部分屬性值寫入主控台視窗:

func getContainerProperties(client *azblob.Client, containerName string) {
    // Reference the container as a client object
    containerClient := client.ServiceClient().NewContainerClient(containerName)

    // Get the container properties
    resp, err := containerClient.GetProperties(context.TODO(), nil)
    handleError(err)

    // Print the container properties
    fmt.Printf("Blob public access: %v\n", *resp.BlobPublicAccess)
    fmt.Printf("Lease status: %v\n", *resp.LeaseStatus)
    fmt.Printf("Lease state: %v\n", *resp.LeaseState)
    fmt.Printf("Has immutability policy: %v\n", *resp.HasImmutabilityPolicy)
}

設定及擷取中繼資料

您可以將中繼資料指定為 blob 或容器資源上的一個或多個成對的名稱和數值。 若要設定元數據,請從容器客戶端物件呼叫下列方法:

設定容器中繼資料會覆寫與容器相關聯的所有現有中繼資料。 您無法修改個別名稱/值組。

下列程式碼範例會在容器上設定中繼資料:

func setContainerMetadata(client *azblob.Client, containerName string) {
    // Reference the container as a client object
    containerClient := client.ServiceClient().NewContainerClient(containerName)

    // Set the container metadata
    var metadata = make(map[string]*string)
    metadata["key1"] = to.Ptr("value1")
    metadata["key2"] = to.Ptr("value2")

    _, err := containerClient.SetMetadata(context.TODO(), nil)
    handleError(err)
}

若要擷取元數據,請從容器客戶端物件呼叫下列方法:

元數據包含在 來自 GetProperties的回應中。 下列範例會讀取元數據值,並將其寫入主控台視窗:

func getContainerMetadata(client *azblob.Client, containerName string) {
    // Reference the container as a client object
    containerClient := client.ServiceClient().NewContainerClient(containerName)

    // Get the container properties, which includes metadata
    resp, err := containerClient.GetProperties(context.TODO(), nil)
    handleError(err)

    // Print the container metadata
    for k, v := range resp.Metadata {
        fmt.Printf("%v: %v\n", k, *v)
    }
}

注意

本指南中的程式碼範例旨在協助您開始使用 Azure Blob 儲存體和 Go。 您應該修改錯誤處理和 Context 值,以符合應用程式的需求。

資源

若要深入瞭解如何使用適用於 Go 的 Azure Blob 儲存體 用戶端模組來設定和擷取容器屬性和元數據,請參閱下列資源。

程式碼範例

REST API 操作

Azure SDK for Go 包含以 Azure REST API 為基礎的連結庫,可讓您透過熟悉的 Go 架構與 REST API 作業互動。 用來設定與擷取屬性和中繼資料的用戶端程式庫方法會使用下列 REST API 作業:

get_container_properties 方法會藉由呼叫取得容器屬性作業和取得容器中繼資料作業來擷取容器屬性和中繼資料。

用戶端模組資源