You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: template_sets.go
    path of file: ./repos/faygo/pongo2
    
    the code of the file until where you have to start completion: package pongo2

import (
	"errors"
	"fmt"
	"io"
	"io/ioutil"
	"log"
	"os"
	"sync"
)

// TemplateLoader allows to implement a virtual file system.
type TemplateLoader interface {
	// Abs calculates the path to a given template. Whenever a path must be resolved
	// due to an import from another template, the base equals the parent template's path.
	Abs(base, name string) string


    
func (set *TemplateSet) BanTag(name string) error {
	_, has := tags[name]
	if !has {
		return fmt.Errorf("Tag '%s' not found.", name)
	}
	if set.firstTemplateCreated {
		return errors.New("You cannot ban any tags after you've added your first template to your template set.")
	}
	_, has = set.bannedTags[name]
	if has {
		return fmt.Errorf("Tag '%s' is already banned.", name)
	}
	set.bannedTags[name] = true

	return nil
}