var Scheme … var Codecs … var WardleComponentName … func init() { … } type ExtraConfig … type Config … type WardleServer … type completedConfig … type CompletedConfig … // Complete fills in any fields not set that are required to have valid data. It's mutating the receiver. func (cfg *Config) Complete() CompletedConfig { … } // New returns a new instance of WardleServer from the given config. func (c completedConfig) New() (*WardleServer, error) { … }