code: func main() {
  	// Prepare ETCD data sync plugin as an plugin dependency
  	etcdDataSync := kvdbsync.NewPlugin(kvdbsync.UseKV(&etcd.DefaultPlugin))
  
  	// Init example plugin dependencies
  	p := &ExamplePlugin{
  		Deps: Deps{
  			ServiceLabel: &servicelabel.DefaultPlugin,
  			Publisher:    etcdDataSync,
  			Watcher:      etcdDataSync,
  		},
  		exampleFinished: make(chan struct{}),
  	}
  	p.SetName("datasync-example")
  	p.SetupLog()
  
  	// Start Agent with example plugin including dependencies
  	a := agent.NewAgent(
  		agent.AllPlugins(p),
  		agent.QuitOnClose(p.exampleFinished),
  	)
  	if err := a.Run(); err != nil {
  		log.Fatal(err)
  	}
  }
docs: // *************************************************************************
  // This example demonstrates the usage of datasync API with etcd
  // as the data store.
  // ExamplePlugin spawns a data publisher and a data consumer (watcher)
  // as two separate go routines.
  // The publisher executes two operations on the same key: CREATE + UPDATE.
  // The consumer is notified with each change and reports the events into
  // the log.
  // ************************************************************************/