type Controller … // NewController creates a new Controller. func NewController(queue workqueue.TypedRateLimitingInterface[string], indexer cache.Indexer, informer cache.Controller) *Controller { … } func (c *Controller) processNextItem() bool { … } // syncToStdout is the business logic of the controller. In this controller it simply prints // information about the pod to stdout. In case an error happened, it has to simply return the error. // The retry logic should not be part of the business logic. func (c *Controller) syncToStdout(key string) error { … } // handleErr checks if an error happened and makes sure we will retry later. func (c *Controller) handleErr(err error, key string) { … } // Run begins watching and syncing. func (c *Controller) Run(workers int, stopCh chan struct{ … } func (c *Controller) runWorker() { … } func main() { … }