全部產品
Search
文件中心

Object Storage Service:Go資源集區QoS管理

更新時間:Jun 13, 2025

本文介紹如何使用Go SDK V2管理配置資源集區QoS。

注意事項

  • 本文範例程式碼以華東1(杭州)的地區IDcn-hangzhou為例,預設使用外網Endpoint,如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS地區和訪問網域名稱

Bucket頻寬管理

為資源集區內的Bucket設定流控

package main

import (
	"bytes"
	"context"
	"crypto/md5"
	"encoding/base64"
	"fmt"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func PutBucketQoSInfo() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義儲存空間名稱
	bucketName := "examplebucket"

	// 讀取QoS設定檔內容
	qosConf, err := os.ReadFile("qos.xml")
	if err != nil {
		// 如果讀取QoS設定檔時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read qos.xml: %v\n", err)
		os.Exit(1)
	}

	// 計算輸入資料的MD5值,並將其轉換為Base64編碼字串
	calcMd5 := func(input []byte) string {
		if len(input) == 0 {
			return "1B2M2Y8AsgTpgAmY7PhCfg=="
		}
		h := md5.New()
		h.Write(input)
		return base64.StdEncoding.EncodeToString(h.Sum(nil))
	}

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "PutBucketQoSInfo", // 操作名稱
		Method: "PUT",              // HTTP方法類型
		Parameters: map[string]string{
			"qosInfo": "", // QoS資訊相關參數
		},
		Headers: map[string]string{
			"Content-MD5": calcMd5(qosConf), // 佈建要求體的MD5校正碼,用於驗證資料完整性
		},
		Body:   bytes.NewReader(qosConf), // 請求體,包含QoS配置內容
		Bucket: oss.Ptr(bucketName),      // 儲存空間名稱
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 列印操作結果
	fmt.Println("The result of PutBucketQoSInfo:", res.Status)
}

擷取Bucket流控配置

package main

import (
	"context"
	"fmt"
	"io"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func GetBucketQoSInfo() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義儲存空間名稱
	bucketName := "examplebucket"

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "GetBucketQoSInfo", // 操作名稱
		Method: "GET",              // HTTP方法類型
		Parameters: map[string]string{
			"qosInfo": "", // QoS資訊相關參數
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 請求體,對於GET請求通常為空白
		Bucket:  oss.Ptr(bucketName), // 儲存空間名稱
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 讀取響應體內容
	body, err := io.ReadAll(res.Body)
	if err != nil {
		// 如果讀取響應體時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read response body: %v\n", err)
		os.Exit(1)
	}

	// 關閉響應體,確保資源被正確釋放
	if res.Body != nil {
		res.Body.Close()
	}

	// 列印操作結果
	fmt.Println("The result of GetBucketQoSInfo:", string(body))
}

刪除資源集區內指定Bucket的流控配置

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func DeleteBucketQoSInfo() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義儲存空間名稱
	bucketName := "examplebucket"

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "DeleteBucketQoSInfo", // 操作名稱
		Method: "DELETE",              // HTTP方法類型
		Parameters: map[string]string{
			"qosInfo": "", // QoS資訊相關參數
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 請求體,對於DELETE請求通常為空白
		Bucket:  oss.Ptr(bucketName), // 儲存空間名稱
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 列印操作結果
	fmt.Println("The result of DeleteBucketQoSInfo:", res.Status)
}

Bucket層級不同要求者的頻寬管理

佈建要求者在Bucket層級的流控

package main

import (
	"bytes"
	"context"
	"crypto/md5"
	"encoding/base64"
	"fmt"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func PutBucketRequesterQoSInfo() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義儲存空間名稱和要求者ID
	bucketName := "examplebucket"
	requester := "2598732222222xxxx"

	// 讀取QoS設定檔內容
	qosConf, err := os.ReadFile("qos.xml")
	if err != nil {
		// 如果讀取QoS設定檔時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read qos.xml: %v\n", err)
		os.Exit(1)
	}

	// 計算輸入資料的MD5值,並將其轉換為Base64編碼字串
	calcMd5 := func(input []byte) string {
		if len(input) == 0 {
			return "1B2M2Y8AsgTpgAmY7PhCfg=="
		}
		h := md5.New()
		h.Write(input)
		return base64.StdEncoding.EncodeToString(h.Sum(nil))
	}

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "PutBucketRequesterQoSInfo", // 操作名稱應與實際操作匹配
		Method: "PUT",                       // HTTP方法類型
		Parameters: map[string]string{
			"requesterQosInfo": "",        // 要求者QoS資訊相關參數
			"qosRequester":     requester, // 要求者ID
		},
		Headers: map[string]string{
			"Content-MD5": calcMd5(qosConf), // 佈建要求體的MD5校正碼,用於驗證資料完整性
		},
		Body:   bytes.NewReader(qosConf), // 請求體,包含QoS配置內容
		Bucket: oss.Ptr(bucketName),      // 儲存空間名稱
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 列印操作結果
	fmt.Println("The result of PutBucketRequesterQoSInfo:", res.Status)
}

擷取指定要求者在Bucket層級的流控配置

package main

import (
	"context"
	"fmt"
	"io"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func GetBucketRequesterQoSInfo() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義儲存空間名稱和要求者ID
	bucketName := "examplebucket"
	requester := "2598732222222xxxx"

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "GetBucketRequesterQoSInfo", // 操作名稱
		Method: "GET",                       // HTTP方法類型
		Parameters: map[string]string{
			"requesterQosInfo": "",        // 要求者QoS資訊相關參數
			"qosRequester":     requester, // 要求者ID
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 請求體,對於GET請求通常為空白
		Bucket:  oss.Ptr(bucketName), // 儲存空間名稱
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 讀取響應體內容
	body, err := io.ReadAll(res.Body)
	if err != nil {
		// 如果讀取響應體時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read response body: %v\n", err)
		os.Exit(1)
	}

	// 關閉響應體,確保資源被正確釋放
	if res.Body != nil {
		res.Body.Close()
	}

	// 列印操作結果
	fmt.Println("The result of GetBucketRequesterQoSInfo:", string(body))
}

擷取所有要求者在Bucket層級的流控配置

package main

import (
	"context"
	"fmt"
	"io"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func ListBucketRequesterQoSInfos() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義儲存空間名稱
	bucketName := "examplebucket"

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "ListBucketRequesterQoSInfos", // 操作名稱
		Method: "GET",                         // HTTP方法類型
		Parameters: map[string]string{
			"requesterQosInfo": "", // 要求者QoS資訊相關參數
			// 選擇性參數:
			// "continuation-token": "25987311111111xxxx", // 用於分頁擷取結果的續傳令牌
			// "max-keys":           "1",                  // 每次返回的最大條目數
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 請求體,對於GET請求通常為空白
		Bucket:  oss.Ptr(bucketName), // 儲存空間名稱
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 讀取響應體內容
	body, err := io.ReadAll(res.Body)
	if err != nil {
		// 如果讀取響應體時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read response body: %v\n", err)
		os.Exit(1)
	}

	// 關閉響應體,確保資源被正確釋放
	if res.Body != nil {
		res.Body.Close()
	}

	// 列印操作結果
	fmt.Println("The result of ListBucketRequesterQoSInfos:", string(body))
}

刪除Bucket的某個要求者流控配置

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func DeleteBucketRequesterQoSInfo() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義儲存空間名稱和要求者ID
	bucketName := "examplebucket"
	requester := "2033310434633xxxx"

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "DeleteBucketRequesterQoSInfo", // 操作名稱
		Method: "DELETE",                       // HTTP方法類型
		Parameters: map[string]string{
			"requesterQosInfo": "",        // 要求者QoS資訊相關參數
			"qosRequester":     requester, // 要求者ID
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 請求體,對於DELETE請求通常為空白
		Bucket:  oss.Ptr(bucketName), // 儲存空間名稱
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 列印操作結果
	fmt.Println("The result of DeleteBucketRequesterQoSInfo:", res.Status)
}

資源集區層級不同要求者的頻寬管理

擷取當前帳號下的所有資源集區資訊

package main

import (
	"context"
	"fmt"
	"io"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func ListResourcePools() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "ListResourcePools", // 操作名稱
		Method: "GET",               // HTTP方法類型
		Parameters: map[string]string{
			"resourcePool": "", // 資源集區相關參數
			// 選擇性參數:
			// "continuation-token": "example-resource-pool", // 用於分頁擷取結果的續傳令牌
			// "max-keys":           "1",       // 每次返回的最大條目數
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 請求體,對於GET請求通常為空白
		Bucket:  nil,                 // 此操作不針對特定儲存空間
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 讀取響應體內容
	body, err := io.ReadAll(res.Body)
	if err != nil {
		// 如果讀取響應體時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read response body: %v\n", err)
		os.Exit(1)
	}

	// 關閉響應體,確保資源被正確釋放
	if res.Body != nil {
		res.Body.Close()
	}

	// 列印操作結果
	fmt.Println("The result of ListResourcePools:", string(body))
}

擷取指定資源集區的資訊

package main

import (
	"context"
	"fmt"
	"io"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func GetResourcePoolInfo() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "GetResourcePoolInfo", // 操作名稱
		Method: "GET",                 // HTTP方法類型
		Parameters: map[string]string{
			"resourcePoolInfo": "",         // 資源集區資訊相關參數
			"resourcePool":     "example-resource-pool", // 需要查詢資訊的具體資源集區名稱
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 請求體,對於GET請求通常為空白
		Bucket:  nil,                 // 此操作不針對特定儲存空間
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 讀取響應體內容
	body, err := io.ReadAll(res.Body)
	if err != nil {
		// 如果讀取響應體時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read response body: %v\n", err)
		os.Exit(1)
	}

	// 關閉響應體,確保資源被正確釋放
	if res.Body != nil {
		res.Body.Close()
	}

	// 列印操作結果
	fmt.Println("The result of GetResourcePoolInfo:", string(body))
}

擷取指定資源集區包含的Bucket列表

package main

import (
	"context"
	"fmt"
	"io"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func ListResourcePoolBuckets() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "ListResourcePoolBucketGroups", // 操作名稱
		Method: "GET",                          // HTTP方法類型
		Parameters: map[string]string{ // 參數列表
			"resourcePool": "example-resource-pool", // 資源集區名稱
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 請求體
		Bucket:  nil,                 // 儲存空間名稱,這裡為空白,因為此操作不針對特定的儲存空間
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 讀取響應體內容
	body, err := io.ReadAll(res.Body)
	if err != nil {
		// 如果讀取響應體時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read response body: %v\n", err)
		os.Exit(1)
	}

	// 關閉響應體,確保資源被正確釋放
	if res.Body != nil {
		res.Body.Close()
	}

	// 列印操作結果
	fmt.Println("The result of ListResourcePoolBucketGroups:", string(body))
}

為資源集區的要求者配置流控

package main

import (
	"bytes"
	"context"
	"crypto/md5"
	"encoding/base64"
	"fmt"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func PutResourcePoolRequesterQoSInfo() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義資源集區名稱和要求者ID
	resourcePool := "example-resource-pool"
	requester := "2598733333333xxxx"

	// 讀取QoS設定檔內容
	qosConf, err := os.ReadFile("qos.xml")
	if err != nil {
		// 如果讀取QoS設定檔時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read qos.xml: %v\n", err)
		os.Exit(1)
	}

	// 計算輸入資料的MD5值,並將其轉換為Base64編碼字串
	calcMd5 := func(input []byte) string {
		if len(input) == 0 {
			return "1B2M2Y8AsgTpgAmY7PhCfg=="
		}
		h := md5.New()
		h.Write(input)
		return base64.StdEncoding.EncodeToString(h.Sum(nil))
	}

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "PutResourcePoolRequesterQoSInfo", // 操作名稱
		Method: "PUT",                             // HTTP方法類型
		Parameters: map[string]string{
			"requesterQosInfo": "",           // 要求者QoS資訊相關參數
			"resourcePool":     resourcePool, // 資源集區名稱
			"qosRequester":     requester,    // 要求者ID
		},
		Headers: map[string]string{
			"Content-MD5": calcMd5(qosConf), // 佈建要求體的MD5校正碼,用於驗證資料完整性
		},
		Body:   bytes.NewReader(qosConf), // 請求體,包含QoS配置內容
		Bucket: nil,                      // 此操作不針對特定儲存空間
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 列印操作結果
	fmt.Println("The result of PutResourcePoolRequesterQoSInfo:", res.Status)
}

擷取指定要求者在資源集區的流控配置

package main

import (
	"context"
	"fmt"
	"io"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func GetResourcePoolRequesterQoSInfo() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義資源集區名稱和要求者ID
	resourcePool := "example-resource-pool"
	requester := "2598732222222xxxx"

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "GetResourcePoolRequesterQoSInfo", // 操作名稱
		Method: "GET",                             // HTTP方法類型
		Parameters: map[string]string{
			"requesterQosInfo": "",           // 要求者QoS資訊相關參數
			"resourcePool":     resourcePool, // 資源集區名稱
			"qosRequester":     requester,    // 要求者ID
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 對於GET請求通常不需要請求體
		Bucket:  nil,                 // 此操作不針對特定儲存桶
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 讀取響應體內容
	body, err := io.ReadAll(res.Body)
	if err != nil {
		// 如果讀取響應體時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read response body: %v\n", err)
		os.Exit(1)
	}

	// 關閉響應體,確保資源被正確釋放
	if res.Body != nil {
		res.Body.Close()
	}

	// 列印操作結果
	fmt.Println("The result of GetResourcePoolRequesterQoSInfo:", string(body))
}

擷取所有要求者在資源集區的流控配置

package main

import (
	"context"
	"fmt"
	"io"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func ListResourcePoolRequesterQoSInfos() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義資源集區名稱
	resourcePool := "example-resource-pool"

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "ListResourcePoolRequesterQoSInfos", // 操作名稱
		Method: "GET",                               // HTTP方法類型
		Parameters: map[string]string{
			"requesterQosInfo": "",           // 要求者QoS資訊相關參數
			"resourcePool":     resourcePool, // 資源集區名稱
			// 選擇性參數:
			// "continuation-token": "25987311111111xxxx", // 用於分頁擷取結果的續傳令牌
			// "max-keys":           "1",                  // 每次返回的最大條目數
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 對於GET請求通常不需要請求體
		Bucket:  nil,                 // 此操作不針對特定儲存桶
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 讀取響應體內容
	body, err := io.ReadAll(res.Body)
	if err != nil {
		// 如果讀取響應體時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read response body: %v\n", err)
		os.Exit(1)
	}

	// 關閉響應體,確保資源被正確釋放
	if res.Body != nil {
		res.Body.Close()
	}

	// 列印操作結果
	fmt.Println("The result of ListResourcePoolRequesterQoSInfos:", string(body))
}

刪除指定要求者在資源集區的流控配置

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func DeleteResourcePoolRequesterQoSInfo() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義資源集區名稱和要求者ID
	resourcePool := "example-resource-pool"
	requester := "2598732222222xxxx"

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "DeleteResourcePoolRequesterQoSInfo", // 操作名稱
		Method: "DELETE",                             // HTTP方法類型
		Parameters: map[string]string{
			"requesterQosInfo": "",           // 要求者QoS資訊相關參數
			"resourcePool":     resourcePool, // 資源集區名稱
			"qosRequester":     requester,    // 要求者ID
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 對於DELETE請求通常不需要請求體
		Bucket:  nil,                 // 此操作不針對特定儲存空間
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 列印操作結果
	fmt.Println("The result of DeleteResourcePoolRequesterQoSInfo:", res.Status)
}

BucketGroup頻寬管理

將資源集區中的Bucket加入到特定BucketGroup

package main

import (
	"context"
	"fmt"
	"io"
	"os"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// PutBucketResourcePoolBucketGroup 函數用於向指定儲存空間組中添加資源集區
func PutBucketResourcePoolBucketGroup() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "PutBucketResourcePoolBucketGroup", // 操作名稱
		Method: "PUT",                              // HTTP方法類型
		Parameters: map[string]string{ // 參數列表
			"resourcePoolBucketGroup": "example-group",           // 資源集區儲存空間組名稱
			"resourcePool":            "example-resource-pool", // 資源集區名稱
		},
		Headers: map[string]string{},    // HTTP頭資訊
		Body:    nil,                    // 請求體
		Bucket:  oss.Ptr("test-bucket"), // 儲存空間名稱
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	var body []byte
	if b, ok := res.Body.(io.Reader); ok {
		buf := new(strings.Builder)
		_, _ = io.Copy(buf, b)
		body = []byte(buf.String())
	} else {
		body = []byte(fmt.Sprintf("%v", res.Body))
	}

	// 列印操作結果
	fmt.Println("The result of PutBucketResourcePoolBucketGroup:", string(body))
}

擷取特定資源集區中的BucketGroup列表

package main

import (
	"context"
	"fmt"
	"io"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// ListResourcePoolBucketGroups 函數用於列出指定資源集區中的儲存空間組。
func ListResourcePoolBucketGroups() {
	// 定義地區,這裡預設使用"cn-hangzhou"
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "ListResourcePoolBucketGroups", // 操作名稱
		Method: "GET",                          // HTTP方法類型
		Parameters: map[string]string{ // 參數列表
			"resourcePool": "example-resource-pool", // 資源集區名稱
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 請求體
		Bucket:  nil,                 // 儲存空間名稱,這裡為空白,因為此操作不針對特定的儲存空間
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 讀取響應體內容
	body, err := io.ReadAll(res.Body)
	if err != nil {
		// 如果讀取響應體時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read response body: %v\n", err)
		os.Exit(1)
	}

	// 關閉響應體,確保資源被正確釋放
	if res.Body != nil {
		res.Body.Close()
	}

	// 列印操作結果
	fmt.Println("The result of ListResourcePoolBucketGroups:", string(body))
}

修改資源集區中BucketGroup的流控配置

package main

import (
	"bytes"
	"context"
	"crypto/md5"
	"encoding/base64"
	"fmt"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

func PutResourcePoolBucketGroupQosInfo() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義資源集區名稱和儲存空間組名稱
	resourcePool := "example-resource-pool"
	group := "example-group"

	// 讀取QoS設定檔內容
	qosConf, err := os.ReadFile("qos.xml")
	if err != nil {
		// 如果讀取QoS設定檔時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read qos.xml: %v\n", err)
		os.Exit(1)
	}

	// 計算輸入資料的MD5值,並將其轉換為Base64編碼字串
	calcMd5 := func(input []byte) string {
		if len(input) == 0 {
			return "1B2M2Y8AsgTpgAmY7PhCfg=="
		}
		h := md5.New()
		h.Write(input)
		return base64.StdEncoding.EncodeToString(h.Sum(nil))
	}

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "PutResourcePoolBucketGroupQoSInfo", // 操作名稱
		Method: "PUT",                               // HTTP方法類型
		Parameters: map[string]string{ // 參數列表
			"resourcePool":                   resourcePool, // 資源集區名稱
			"resourcePoolBucketGroup":        group,        // 儲存空間組名稱
			"resourcePoolBucketGroupQosInfo": "",           // QoS資訊相關參數
		},
		Headers: map[string]string{ // HTTP頭資訊
			"Content-MD5": calcMd5(qosConf), // 佈建要求體的MD5校正碼,用於驗證資料完整性
		},
		Body:   bytes.NewReader(qosConf), // 請求體,包含QoS配置內容
		Bucket: nil,                      // 儲存空間名稱,這裡為空白,因為此操作不針對特定的儲存空間
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 列印操作結果
	fmt.Println("The result of PutResourcePoolBucketGroupQoSInfo:", res.Status)
}

擷取資源集區中BucketGroup的流控配置

package main

import (
	"context"
	"fmt"
	"io"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// GetResourcePoolBucketGroupQosInfo 函數用於擷取指定資源集區儲存空間組的QoS資訊。
func GetResourcePoolBucketGroupQosInfo() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義資源集區名稱和儲存空間組名稱
	resourcePool := "example-resource-pool"
	ResourcePoolBucketGroup := "example-group"

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "GetResourcePoolBucketGroupQoSInfo", // 操作名稱
		Method: "GET",                               // HTTP方法類型
		Parameters: map[string]string{ // 參數列表
			"resourcePool":                   resourcePool,            // 資源集區名稱
			"resourcePoolBucketGroup":        ResourcePoolBucketGroup, // 儲存空間組名稱
			"resourcePoolBucketGroupQoSInfo": "",                      // QoS資訊相關參數
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 請求體,對於GET請求通常為空白
		Bucket:  nil,                 // 儲存空間名稱,這裡為空白,因為此操作不針對特定的儲存空間
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 讀取響應體內容
	body, err := io.ReadAll(res.Body)
	if err != nil {
		// 如果讀取響應體時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read response body: %v\n", err)
		os.Exit(1)
	}

	// 關閉響應體,確保資源被正確釋放
	if res.Body != nil {
		res.Body.Close()
	}

	// 列印操作結果
	fmt.Println("The result of GetResourcePoolBucketGroupQoSInfo:", string(body))
}

列舉資源集區中BucketGroup的流控配置

package main

import (
	"context"
	"fmt"
	"io"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// ListResourcePoolBucketGroupQosInfos 函數用於列出指定資源集區中所有儲存空間組的QoS資訊。
func ListResourcePoolBucketGroupQosInfos() {
	// 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義資源集區名稱
	resourcePool := "example-resource-pool"

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "ListResourcePoolBucketGroupQoSInfos", // 操作名稱
		Method: "GET",                                 // HTTP方法類型
		Parameters: map[string]string{ // 參數列表
			"resourcePool": resourcePool, // 資源集區名稱
			// 選擇性參數:
			// "continuation-token": "25987311111111xxxx", // 續傳令牌,可用於分頁擷取結果
			// "max-keys":           "1",                  // 最大返回條目數
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 請求體,對於GET請求通常為空白
		Bucket:  nil,                 // 儲存空間名稱,這裡為空白,因為此操作不針對特定的儲存空間
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 讀取響應體內容
	body, err := io.ReadAll(res.Body)
	if err != nil {
		// 如果讀取響應體時發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("failed to read response body: %v\n", err)
		os.Exit(1)
	}

	// 關閉響應體,確保資源被正確釋放
	if res.Body != nil {
		res.Body.Close()
	}

	// 列印操作結果
	fmt.Println("The result of ListResourcePoolBucketGroupQoSInfos:", string(body))
}

刪除資源集區中BucketGroup的流控配置

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// DeleteResourcePoolBucketGroupQosInfo 函數用於刪除指定資源集區儲存空間組的QoS資訊。
func DeleteResourcePoolBucketGroupQosInfo() {
	// 定義地區,這裡預設使用"cn-hangzhou"
	var region = "cn-hangzhou"

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 定義資源集區名稱和儲存空間組名稱
	resourcePool := "example-resource-pool"
	group := "example-group"

	// 建立操作輸入參數,包括操作名稱、方法類型、參數等
	input := &oss.OperationInput{
		OpName: "DeleteResourcePoolBucketGroupQoSInfo", // 操作名稱
		Method: "DELETE",                               // HTTP方法類型
		Parameters: map[string]string{ // 參數列表
			"resourcePool":                   resourcePool, // 資源集區名稱
			"resourcePoolBucketGroup":        group,        // 儲存空間組名稱
			"resourcePoolBucketGroupQoSInfo": "",           // QoS資訊相關參數
		},
		Headers: map[string]string{}, // HTTP頭資訊
		Body:    nil,                 // 請求體,對於DELETE請求通常為空白
		Bucket:  nil,                 // 儲存空間名稱,這裡為空白,因為此操作不針對特定的儲存空間
	}

	// 執行操作請求,並接收響應結果或錯誤
	res, err := client.InvokeOperation(context.TODO(), input)
	if err != nil {
		// 如果發生錯誤,則列印錯誤資訊並退出程式
		fmt.Printf("invoke operation got error: %v\n", err)
		os.Exit(1)
	}

	// 列印操作結果
	fmt.Println("The result of DeleteResourcePoolBucketGroupQoSInfo:", res.Status)
}

相關文檔