Kubernetes源码-SchemeBuilder

SchemeBuilder

用于存放处理 Scheme 的函数

type SchemeBuilder []func(*Scheme) error 

NewSchemeBuilder

创建并初始化 SchemeBuilder

func NewSchemeBuilder(funcs ...func(*Scheme) error) SchemeBuilder {
    var sb SchemeBuilder
    sb.Register(funcs...)
    return sb
}

Register

向 SchemeBuilder 注册处理 Scheme 的函数

func (sb *SchemeBuilder) Register(funcs ...func(*Scheme) error) {
    for _, f := range funcs {
        *sb = append(*sb, f)
    }
}

AddToScheme

将 SchemeBuilder 中的函数作用于 Scheme

func (sb *SchemeBuilder) AddToScheme(s *Scheme) error {
    for _, f := range *sb {
        if err := f(s); err != nil {
            return err
        }
    }
    return nil
}

Usage

v1

package SchemeBuilderV1
var (
    SchemeBuilderV1 = runtime.NewSchemeBuilder(addKnownTypes)
    AddToScheme = SchemeBuilderV1.AddToScheme
)

func addKnownTypes(scheme *runtime.Scheme) error { ... }

v2

package SchemeBuilderV2
var (
    SchemeBuilderV2 = runtime.NewSchemeBuilder()
    AddToScheme = SchemeBuilderV2.AddToScheme
)

func init() { SchemeBuilder.Register(addKnownTypes) }

func addKnownTypes(scheme *runtime.Scheme) error { ... }

AddToScheme

scheme := runtime.NewScheme()
if err := SchemeBuilderV1.AddToScheme(scheme); err != nil { ... }
if err := SchemeBuilderV2.AddToScheme(scheme); err != nil { ... } 
原文地址:https://www.cnblogs.com/zhangmingcheng/p/14621864.html