Kubernetes 是如何实现Quantity struct的

855 阅读1分钟

概要

k8s.io/apimachinery/pkg/api/resource 是处理ResourceList时常用的库,它的核心是Quantity结构,实际上Quantity的设计并不复杂。

细节

常用接口

  • resource.ParseQuantity
  • Quantity.Value
  • Quantity.MilliValue
  • resource.NewQuantity

实现

type Quantity struct {
	// int64 
	i int64Amount
	// infinite Decimal
	d infDecAmount
	s string
        // 与序列化格式有关,见CanonicalizeBytes
	Format
}

type Format string

const (
	DecimalExponent = Format("DecimalExponent") // e.g., 12e6
	BinarySI        = Format("BinarySI")        // e.g., 12Mi (12 * 2^20)
	DecimalSI       = Format("DecimalSI")       // e.g., 12M  (12 * 10^6)
)

看起来有i和d,很复杂,其实两者是替代关系。

  • 当int64足够存放的时候,就用i
  • 当int64溢出的时候,用d,d的本质是big.Int