func Set(thread string, tag []string) {
	err := db.DB.Update(func(tx *bolt.Tx) error {
		ts, err := db.GetMap(tx, "usertag", []byte(thread))
		if err != nil {
			log.Println(err)
		}
		for t := range ts {
			err = db.DelMap(tx, "usertagTag", []byte(t), thread)
			if err != nil {
				return err
			}
		}
		if err := db.Del(tx, "usertag", []byte(thread)); err != nil {
			log.Println(err)
		}
		return AddTX(tx, thread, tag)
	})
	if err != nil {
		log.Print(err)
	}
}
Set remove all tags and saves tag strings.
package user
import (
	"log"
	"github.com/boltdb/bolt"
	"github.com/shingetsu-gou/shingetsu-gou/db"
	"github.com/shingetsu-gou/shingetsu-gou/tag"
)
func String(thread string) string {
	tags := GetByThread(thread)
	return tags.String()
}
func Len(thread string) int {
	var r map[string]struct{}
	err := db.DB.View(func(tx *bolt.Tx) error {
		var errr error
		r, errr = db.GetMap(tx, "usertag", []byte(thread))
		return errr
	})
	if err != nil {
		return 0
	}
	return len(r)
}
func Has(thread string, tag ...string) bool {
	rr := false
	err := db.DB.View(func(tx *bolt.Tx) error {
		for _, t := range tag {
			if db.HasVal(tx, "usertag", []byte(thread), t) {
				rr = true
				return nil
			}
		}
		return nil
	})
	if err != nil {
		log.Println(err)
	}
	return rr
}
func Get() tag.Slice {
	var r []string
	err := db.DB.View(func(tx *bolt.Tx) error {
		var err error
		r, err = db.KeyStrings(tx, "usertagTag")
		return err
	})
	if err != nil {
		return nil
	}
	return tag.NewSlice(r)
}
func GetStrings(thread string) []string {
	var r []string
	err := db.DB.View(func(tx *bolt.Tx) error {
		var err error
		r, err = db.MapKeys(tx, "usertag", []byte(thread))
		return err
	})
	if err != nil {
		return nil
	}
	return r
}
func GetByThread(thread string) tag.Slice {
	r := GetStrings(thread)
	return tag.NewSlice(r)
}
func Add(thread string, tag []string) {
	err := db.DB.Update(func(tx *bolt.Tx) error {
		return AddTX(tx, thread, tag)
	})
	if err != nil {
		log.Println(err)
	}
}
func AddTX(tx *bolt.Tx, thread string, tag []string) error {
	for _, t := range tag {
		if err := db.PutMap(tx, "usertag", []byte(thread), t); err != nil {
			return err
		}
		if err := db.PutMap(tx, "usertagTag", []byte(t), thread); err != nil {
			return err
		}
	}
	return nil
}