code: func (e *Engine) LoadAssets(virtualDirectory string, virtualExtension string, assetFn func(name string) ([]byte, error), namesFn func() []string) error {
  	// register the global helpers
  	if len(e.templateCache) == 0 && e.Config.Helpers != nil {
  		raymond.RegisterHelpers(e.Config.Helpers)
  	}
  	if len(virtualDirectory) > 0 {
  		if virtualDirectory[0] == '.' { // first check for .wrong
  			virtualDirectory = virtualDirectory[1:]
  		}
  		if virtualDirectory[0] == '/' || virtualDirectory[0] == os.PathSeparator { // second check for /something, (or ./something if we had dot on 0 it will be removed
  			virtualDirectory = virtualDirectory[1:]
  		}
  	}
  	var templateErr error
  
  	e.mu.Lock()
  	defer e.mu.Unlock()
  
  	names := namesFn()
  	for _, path := range names {
  		if !strings.HasPrefix(path, virtualDirectory) {
  			continue
  		}
  		ext := filepath.Ext(path)
  		if ext == virtualExtension {
  
  			rel, err := filepath.Rel(virtualDirectory, path)
  			if err != nil {
  				templateErr = err
  				return err
  			}
  
  			buf, err := assetFn(path)
  			if err != nil {
  				templateErr = err
  				return err
  			}
  			contents := string(buf)
  			name := filepath.ToSlash(rel)
  
  			tmpl, err := raymond.Parse(contents)
  			if err != nil {
  				templateErr = err
  				return err
  			}
  			e.templateCache[name] = tmpl
  
  		}
  	}
  	return templateErr
  }
docs: // LoadAssets loads the templates by binary