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 { ... }