code: func CopyDirs(src, dest string) error {
  	if err := os.MkdirAll(dest, 0777); err != nil {
  		return err
  	}
  	files, err := readDirs(src)
  	if err != nil {
  		return err
  	}
  
  	for _, f := range files {
  		dp := filepath.Join(dest, f)
  		sp := filepath.Join(src, f)
  
  		stat, err := os.Stat(sp)
  		if err != nil {
  			return err
  		}
  
  		// Empty directories are also created.
  		if stat.IsDir() {
  			if err := os.MkdirAll(dp, 0777); err != nil {
  				return err
  			}
  			continue
  		}
  
  		if err := copyFile(sp, dp); err != nil {
  			return err
  		}
  	}
  	return nil
  }
docs: // CopyDirs copies all directories, subdirectories and files recursively including the empty folders.
  // Source and destination must be full paths.