code: func (ini *Init) Do() (interface{}, error) {
  	if ini == nil {
  		panic("init is nil")
  	}
  
  	ini.init.Do(func() {
  		prev := ini.prev
  		if prev != nil {
  			// A branch. Initialize the ancestors.
  			if prev.shouldInitialize() {
  				_, err := prev.Do()
  				if err != nil {
  					ini.err = err
  					return
  				}
  			} else if prev.inProgress() {
  				// Concurrent initialization. The following init func
  				// may depend on earlier state, so wait.
  				prev.wait()
  			}
  		}
  
  		if ini.f != nil {
  			ini.out, ini.err = ini.f()
  		}
  
  		for _, child := range ini.children {
  			if child.shouldInitialize() {
  				_, err := child.Do()
  				if err != nil {
  					ini.err = err
  					return
  				}
  			}
  		}
  	})
  
  	ini.wait()
  
  	return ini.out, ini.err
  
  }
docs: // Do initializes the entire dependency graph.