code: func FileSystemLoader(path string) Loader {
  	return func(c context.Context, funcMap template.FuncMap) (map[string]*template.Template, error) {
  		abs, err := filepath.Abs(path)
  		if err != nil {
  			return nil, err
  		}
  
  		// Read all relevant files into memory. It's ok, they are small.
  		files := map[string]string{}
  		if err = readFilesInDir(filepath.Join(abs, "includes"), files); err != nil {
  			return nil, err
  		}
  		if err = readFilesInDir(filepath.Join(abs, "pages"), files); err != nil {
  			return nil, err
  		}
  
  		// Convert to assets map as consumed by AssetsLoader (relative slash
  		// separated paths) and reuse AssetsLoader.
  		assets := map[string]string{}
  		for k, v := range files {
  			rel, err := filepath.Rel(abs, k)
  			if err != nil {
  				return nil, err
  			}
  			assets[filepath.ToSlash(rel)] = v
  		}
  		return AssetsLoader(assets)(c, funcMap)
  	}
  }
docs: // FileSystemLoader returns Loader that loads templates from file system.
  //
  // The directory with templates is expected to have special structure: 'pages/'
  // contain all top-level templates that will be loaded, 'includes/' contain
  // templates that will be associated with every top-level template from
  // 'pages/'.
  //
  // Only templates from 'pages/' are included in the output map.