2014-08-18 08:41:43 +00:00
|
|
|
// Copyright 2014 beego Author. All Rights Reserved.
|
2014-07-03 15:40:21 +00:00
|
|
|
//
|
2014-08-18 08:41:43 +00:00
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
2014-07-03 15:40:21 +00:00
|
|
|
//
|
2014-08-18 08:41:43 +00:00
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
2014-07-03 15:40:21 +00:00
|
|
|
//
|
2014-08-18 08:41:43 +00:00
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
2015-09-10 06:53:19 +00:00
|
|
|
// Package yaml for config provider
|
2014-08-18 08:41:43 +00:00
|
|
|
//
|
|
|
|
// depend on github.com/beego/goyaml2
|
|
|
|
//
|
|
|
|
// go install github.com/beego/goyaml2
|
|
|
|
//
|
|
|
|
// Usage:
|
|
|
|
// import(
|
|
|
|
// _ "github.com/astaxie/beego/config/yaml"
|
|
|
|
// "github.com/astaxie/beego/config"
|
|
|
|
// )
|
|
|
|
//
|
|
|
|
// cnf, err := config.NewConfig("yaml", "config.yaml")
|
2014-07-03 15:40:21 +00:00
|
|
|
//
|
2014-08-18 08:41:43 +00:00
|
|
|
// more docs http://beego.me/docs/module/config.md
|
2014-07-17 08:22:52 +00:00
|
|
|
package yaml
|
2013-08-21 16:07:33 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"encoding/json"
|
|
|
|
"errors"
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
"fmt"
|
2013-08-21 16:07:33 +00:00
|
|
|
"io/ioutil"
|
|
|
|
"log"
|
|
|
|
"os"
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
"path"
|
2014-01-15 09:19:03 +00:00
|
|
|
"strings"
|
2013-08-21 16:07:33 +00:00
|
|
|
"sync"
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
"time"
|
2013-12-03 13:37:39 +00:00
|
|
|
|
2014-05-15 06:18:47 +00:00
|
|
|
"github.com/astaxie/beego/config"
|
2013-12-03 13:37:39 +00:00
|
|
|
"github.com/beego/goyaml2"
|
2013-08-21 16:07:33 +00:00
|
|
|
)
|
|
|
|
|
2015-09-10 06:53:19 +00:00
|
|
|
// Config is a yaml config parser and implements Config interface.
|
|
|
|
type Config struct{}
|
2013-08-21 16:07:33 +00:00
|
|
|
|
2013-12-24 13:57:33 +00:00
|
|
|
// Parse returns a ConfigContainer with parsed yaml config map.
|
2015-09-10 06:53:19 +00:00
|
|
|
func (yaml *Config) Parse(filename string) (y config.Configer, err error) {
|
2013-08-21 16:07:33 +00:00
|
|
|
cnf, err := ReadYmlReader(filename)
|
|
|
|
if err != nil {
|
2014-07-17 08:22:52 +00:00
|
|
|
return
|
2013-08-21 16:07:33 +00:00
|
|
|
}
|
2015-09-10 06:53:19 +00:00
|
|
|
y = &ConfigContainer{
|
2014-07-17 08:22:52 +00:00
|
|
|
data: cnf,
|
|
|
|
}
|
|
|
|
return
|
2013-08-21 16:07:33 +00:00
|
|
|
}
|
|
|
|
|
2015-09-10 06:53:19 +00:00
|
|
|
// ParseData parse yaml data
|
|
|
|
func (yaml *Config) ParseData(data []byte) (config.Configer, error) {
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
// Save memory data to temporary file
|
|
|
|
tmpName := path.Join(os.TempDir(), "beego", fmt.Sprintf("%d", time.Now().Nanosecond()))
|
|
|
|
os.MkdirAll(path.Dir(tmpName), os.ModePerm)
|
|
|
|
if err := ioutil.WriteFile(tmpName, data, 0655); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return yaml.Parse(tmpName)
|
|
|
|
}
|
|
|
|
|
2015-09-10 06:53:19 +00:00
|
|
|
// ReadYmlReader Read yaml file to map.
|
2013-12-24 13:57:33 +00:00
|
|
|
// if json like, use json package, unless goyaml2 package.
|
2013-08-21 16:07:33 +00:00
|
|
|
func ReadYmlReader(path string) (cnf map[string]interface{}, err error) {
|
|
|
|
f, err := os.Open(path)
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
defer f.Close()
|
2014-07-17 08:22:52 +00:00
|
|
|
|
2013-08-21 16:07:33 +00:00
|
|
|
buf, err := ioutil.ReadAll(f)
|
|
|
|
if err != nil || len(buf) < 3 {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if string(buf[0:1]) == "{" {
|
2014-07-17 08:22:52 +00:00
|
|
|
log.Println("Look like a Json, try json umarshal")
|
2013-08-21 16:07:33 +00:00
|
|
|
err = json.Unmarshal(buf, &cnf)
|
|
|
|
if err == nil {
|
|
|
|
log.Println("It is Json Map")
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-07-17 08:22:52 +00:00
|
|
|
data, err := goyaml2.Read(bytes.NewBuffer(buf))
|
|
|
|
if err != nil {
|
|
|
|
log.Println("Goyaml2 ERR>", string(buf), err)
|
2013-08-21 16:07:33 +00:00
|
|
|
return
|
|
|
|
}
|
2014-07-17 08:22:52 +00:00
|
|
|
|
|
|
|
if data == nil {
|
2013-08-21 16:07:33 +00:00
|
|
|
log.Println("Goyaml2 output nil? Pls report bug\n" + string(buf))
|
2014-07-17 08:22:52 +00:00
|
|
|
return
|
2013-08-21 16:07:33 +00:00
|
|
|
}
|
2014-07-17 08:22:52 +00:00
|
|
|
cnf, ok := data.(map[string]interface{})
|
2013-08-21 16:07:33 +00:00
|
|
|
if !ok {
|
2014-07-17 08:22:52 +00:00
|
|
|
log.Println("Not a Map? >> ", string(buf), data)
|
2013-08-21 16:07:33 +00:00
|
|
|
cnf = nil
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2015-09-10 06:53:19 +00:00
|
|
|
// ConfigContainer A Config represents the yaml configuration.
|
|
|
|
type ConfigContainer struct {
|
2013-08-21 16:07:33 +00:00
|
|
|
data map[string]interface{}
|
|
|
|
sync.Mutex
|
|
|
|
}
|
|
|
|
|
2013-12-24 13:57:33 +00:00
|
|
|
// Bool returns the boolean value for a given key.
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) Bool(key string) (bool, error) {
|
Support Parse Bool with more diffrent values
ParseBool returns the boolean value represented by the string.
It accepts 1, 1.0, t, T, TRUE, true, True, YES, yes, Yes,Y, y, ON, on,
On,
0, 0.0, f, F, FALSE, false, False, NO, no, No, N,n, OFF, off, Off.
Any other value returns an error.
2016-01-23 03:02:40 +00:00
|
|
|
if v, ok := c.data[key]; ok {
|
|
|
|
return config.ParseBool(v)
|
2013-08-21 16:07:33 +00:00
|
|
|
}
|
2016-01-25 12:57:41 +00:00
|
|
|
return false, fmt.Errorf("not exist key: %q", key)
|
2013-08-21 16:07:33 +00:00
|
|
|
}
|
|
|
|
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
// DefaultBool return the bool value if has no error
|
|
|
|
// otherwise return the defaultval
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) DefaultBool(key string, defaultval bool) bool {
|
|
|
|
v, err := c.Bool(key)
|
|
|
|
if err != nil {
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
return defaultval
|
|
|
|
}
|
2015-09-10 06:53:19 +00:00
|
|
|
return v
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
}
|
|
|
|
|
2013-12-24 13:57:33 +00:00
|
|
|
// Int returns the integer value for a given key.
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) Int(key string) (int, error) {
|
2013-08-22 05:46:22 +00:00
|
|
|
if v, ok := c.data[key].(int64); ok {
|
|
|
|
return int(v), nil
|
2013-08-21 16:07:33 +00:00
|
|
|
}
|
|
|
|
return 0, errors.New("not int value")
|
|
|
|
}
|
|
|
|
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
// DefaultInt returns the integer value for a given key.
|
|
|
|
// if err != nil return defaltval
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) DefaultInt(key string, defaultval int) int {
|
|
|
|
v, err := c.Int(key)
|
|
|
|
if err != nil {
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
return defaultval
|
|
|
|
}
|
2015-09-10 06:53:19 +00:00
|
|
|
return v
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
}
|
|
|
|
|
2013-12-24 13:57:33 +00:00
|
|
|
// Int64 returns the int64 value for a given key.
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) Int64(key string) (int64, error) {
|
2013-08-21 16:07:33 +00:00
|
|
|
if v, ok := c.data[key].(int64); ok {
|
|
|
|
return v, nil
|
|
|
|
}
|
|
|
|
return 0, errors.New("not bool value")
|
|
|
|
}
|
|
|
|
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
// DefaultInt64 returns the int64 value for a given key.
|
|
|
|
// if err != nil return defaltval
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) DefaultInt64(key string, defaultval int64) int64 {
|
|
|
|
v, err := c.Int64(key)
|
|
|
|
if err != nil {
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
return defaultval
|
|
|
|
}
|
2015-09-10 06:53:19 +00:00
|
|
|
return v
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
}
|
|
|
|
|
2013-12-24 13:57:33 +00:00
|
|
|
// Float returns the float value for a given key.
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) Float(key string) (float64, error) {
|
2013-08-21 16:07:33 +00:00
|
|
|
if v, ok := c.data[key].(float64); ok {
|
|
|
|
return v, nil
|
|
|
|
}
|
|
|
|
return 0.0, errors.New("not float64 value")
|
|
|
|
}
|
|
|
|
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
// DefaultFloat returns the float64 value for a given key.
|
|
|
|
// if err != nil return defaltval
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) DefaultFloat(key string, defaultval float64) float64 {
|
|
|
|
v, err := c.Float(key)
|
|
|
|
if err != nil {
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
return defaultval
|
|
|
|
}
|
2015-09-10 06:53:19 +00:00
|
|
|
return v
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
}
|
|
|
|
|
2013-12-24 13:57:33 +00:00
|
|
|
// String returns the string value for a given key.
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) String(key string) string {
|
2013-08-21 16:07:33 +00:00
|
|
|
if v, ok := c.data[key].(string); ok {
|
|
|
|
return v
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
// DefaultString returns the string value for a given key.
|
|
|
|
// if err != nil return defaltval
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) DefaultString(key string, defaultval string) string {
|
|
|
|
v := c.String(key)
|
|
|
|
if v == "" {
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
return defaultval
|
|
|
|
}
|
2015-09-10 06:53:19 +00:00
|
|
|
return v
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
}
|
|
|
|
|
2014-01-15 09:19:03 +00:00
|
|
|
// Strings returns the []string value for a given key.
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) Strings(key string) []string {
|
2014-01-15 09:19:03 +00:00
|
|
|
return strings.Split(c.String(key), ";")
|
|
|
|
}
|
|
|
|
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
// DefaultStrings returns the []string value for a given key.
|
|
|
|
// if err != nil return defaltval
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) DefaultStrings(key string, defaultval []string) []string {
|
|
|
|
v := c.Strings(key)
|
|
|
|
if len(v) == 0 {
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
return defaultval
|
|
|
|
}
|
2015-09-10 06:53:19 +00:00
|
|
|
return v
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// GetSection returns map for the given section
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) GetSection(section string) (map[string]string, error) {
|
|
|
|
v, ok := c.data[section]
|
|
|
|
if ok {
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
return v.(map[string]string), nil
|
|
|
|
}
|
2015-09-10 06:53:19 +00:00
|
|
|
return nil, errors.New("not exist setction")
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// SaveConfigFile save the config into file
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) SaveConfigFile(filename string) (err error) {
|
config: add more method
DefaultString(key string, defaultval string) string // support
section::key type in key string when using ini and json type;
Int,Int64,Bool,Float,DIY are same.
DefaultStrings(key string, defaultval []string) []string //get string
slice
DefaultInt(key string, defaultval int) int
DefaultInt64(key string, defaultval int64) int64
DefaultBool(key string, defaultval bool) bool
DefaultFloat(key string, defaultval float64) float64
DIY(key string) (interface{}, error)
GetSection(section string) (map[string]string, error)
SaveConfigFile(filename string) error
2014-08-07 09:24:21 +00:00
|
|
|
// Write configuration file by filename.
|
|
|
|
f, err := os.Create(filename)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
defer f.Close()
|
|
|
|
err = goyaml2.Write(f, c.data)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2015-09-10 06:53:19 +00:00
|
|
|
// Set writes a new value for key.
|
|
|
|
func (c *ConfigContainer) Set(key, val string) error {
|
2013-08-21 16:07:33 +00:00
|
|
|
c.Lock()
|
|
|
|
defer c.Unlock()
|
|
|
|
c.data[key] = val
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2013-12-24 13:57:33 +00:00
|
|
|
// DIY returns the raw value by a given key.
|
2015-09-10 06:53:19 +00:00
|
|
|
func (c *ConfigContainer) DIY(key string) (v interface{}, err error) {
|
2013-08-21 16:07:33 +00:00
|
|
|
if v, ok := c.data[key]; ok {
|
|
|
|
return v, nil
|
|
|
|
}
|
|
|
|
return nil, errors.New("not exist key")
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
2015-09-10 06:53:19 +00:00
|
|
|
config.Register("yaml", &Config{})
|
2013-08-21 16:07:33 +00:00
|
|
|
}
|