You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Azure SDK for Golang获取与az network list-usages CLI命令一致的网络使用量和配额信息

如何使用Azure SDK for Golang获取与az network list-usages CLI命令一致的网络使用量和配额信息

嗨,我看你现在遇到的问题是用armquota包获取不到实际的使用数值(比如Virtual Networks的3),这是因为你找错了对应的SDK包啦!az network list-usages CLI命令其实调用的是Microsoft.Network资源提供者的用量接口,而非Microsoft.Quota的,咱们换个正确的SDK包就能解决问题。

正确实现方案

你需要使用专门针对网络资源设计的armnetwork包,它和az network list-usages调用的是同一个后端接口,能准确返回和CLI一致的结果。

步骤1:引入依赖包

import "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork"

步骤2:完整代码示例

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork"
)

func main() {
	ctx := context.Background()
	subscriptionID := "<你的订阅ID>"
	location := "centralus"

	// 创建Azure默认身份凭据
	cred, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil {
		log.Fatalf("创建凭据失败: %v", err)
	}

	// 初始化网络资源客户端工厂
	clientFactory, err := armnetwork.NewClientFactory(subscriptionID, cred, nil)
	if err != nil {
		log.Fatalf("创建客户端工厂失败: %v", err)
	}
	usagesClient := clientFactory.NewUsagesClient()

	// 分页获取指定区域的所有网络资源用量
	pager := usagesClient.NewListPager(location, nil)
	for pager.More() {
		page, err := pager.NextPage(ctx)
		if err != nil {
			log.Fatalf("分页获取数据失败: %v", err)
		}

		// 格式化输出,和CLI的table格式对齐
		fmt.Printf("%-70s %-15s %-10s\n", "Name", "CurrentValue", "Limit")
		fmt.Println("-----------------------------------------------------------------  --------------  ----------")
		for _, usage := range page.Value {
			localizedName := *usage.Name.LocalizedValue
			currentValue := *usage.CurrentValue
			limit := *usage.Limit
			fmt.Printf("%-70s %-15d %-10d\n", localizedName, currentValue, limit)
		}
	}
}

为什么之前的方法无效?

你之前使用的armquota包对应的是Azure配额管理服务的API,它的Usages接口主要返回配额规则相关的元数据,并不直接对应网络资源的实际使用统计,所以会出现usages字段为空的情况。而armnetwork包的UsagesClient是专门为网络资源设计的,完全匹配az network list-usages的后端逻辑,能准确拿到你需要的CurrentValue和Limit值。

额外小技巧

如果只想获取特定资源类型(比如VirtualNetworks)的用量,可以在遍历的时候加个过滤条件:

if *usage.Name.Value == "VirtualNetworks" {
    // 输出该资源的用量信息
}

备注:内容来源于stack exchange,提问作者trivelt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:24:37