概要
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