func GetUint(key string) uint {
	return cast.ToUint(v.Get(key))
}
GetUint returns the value associated with the key as a uint.
package config
import (
	"os"
	"path/filepath"
	"sync"
	"time"
	"github.com/spf13/cast"
	"github.com/spf13/viper"
)
var (
	v    = viper.New()
	lock sync.RWMutex
)
func init() {
	v.SetConfigName("nirvana")
	file, err := os.Executable()
	if err != nil {
		panic(err)
	}
	path := filepath.Dir(file)
	v.AddConfigPath("./")
	v.AddConfigPath("./config/")
	v.AddConfigPath(path + "/")
	v.AddConfigPath(path + "/config/")
	v.AddConfigPath("/etc/nirvana/")
	if err := v.ReadInConfig(); err != nil {
		if _, ok := err.(viper.ConfigFileNotFoundError); !ok {
			panic(err)
		}
	}
}
func IsSet(key string) bool {
	return v.IsSet(key)
}
func Set(key string, value interface{}) {
	lock.Lock()
	defer lock.Unlock()
	v.Set(key, value)
}
func Get(key string) interface{} {
	return v.Get(key)
}
func GetBool(key string) bool {
	return cast.ToBool(v.Get(key))
}
func GetDuration(key string) time.Duration {
	return cast.ToDuration(v.Get(key))
}
func GetFloat32(key string) float32 {
	return cast.ToFloat32(v.Get(key))
}
func GetFloat64(key string) float64 {
	return cast.ToFloat64(v.Get(key))
}
func GetInt(key string) int {
	return cast.ToInt(v.Get(key))
}
func GetInt8(key string) int8 {
	return cast.ToInt8(v.Get(key))
}
func GetInt16(key string) int16 {
	return cast.ToInt16(v.Get(key))
}
func GetInt32(key string) int32 {
	return cast.ToInt32(v.Get(key))
}
func GetInt64(key string) int64 {
	return cast.ToInt64(v.Get(key))
}
func GetString(key string) string {
	return cast.ToString(v.Get(key))
}
func GetStringSlice(key string) []string {
	return cast.ToStringSlice(v.Get(key))
}