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.
|
|
|
|
|
2016-03-12 06:32:39 +00:00
|
|
|
// Package xml for config provider.
|
2014-08-18 08:41:43 +00:00
|
|
|
//
|
2016-03-12 06:32:39 +00:00
|
|
|
// depend on github.com/beego/x2j.
|
2014-08-18 08:41:43 +00:00
|
|
|
//
|
2016-03-12 06:32:39 +00:00
|
|
|
// go install github.com/beego/x2j.
|
2014-08-18 08:41:43 +00:00
|
|
|
//
|
|
|
|
// Usage:
|
2016-03-12 06:32:39 +00:00
|
|
|
// import(
|
|
|
|
// _ "github.com/astaxie/beego/config/xml"
|
|
|
|
// "github.com/astaxie/beego/config"
|
|
|
|
// )
|
2014-08-18 08:41:43 +00:00
|
|
|
//
|
|
|
|
// cnf, err := config.NewConfig("xml", "config.xml")
|
2014-07-03 15:40:21 +00:00
|
|
|
//
|
2016-03-12 06:32:39 +00:00
|
|
|
//More docs http://beego.me/docs/module/config.md
|
2014-07-17 08:22:41 +00:00
|
|
|
package xml
|
2013-08-21 16:07:33 +00:00
|
|
|
|
|
|
|
import (
|
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
|
|
|
"encoding/xml"
|
2013-08-21 16:07:33 +00:00
|
|
|
"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"
|
|
|
|
"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"
|
2013-08-21 16:07:33 +00:00
|
|
|
"strconv"
|
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/x2j"
|
2013-08-21 16:07:33 +00:00
|
|
|
)
|
|
|
|
|
2015-09-10 06:53:19 +00:00
|
|
|
// Config is a xml config parser and implements Config interface.
|
2013-12-24 13:57:33 +00:00
|
|
|
// xml configurations should be included in <config></config> tag.
|
|
|
|
// only support key/value pair as <key>value</key> as each item.
|
2015-09-10 06:53:19 +00:00
|
|
|
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 xml config map.
|
2015-09-10 06:53:19 +00:00
|
|
|
func (xc *Config) Parse(filename string) (config.Configer, error) {
|
2013-08-21 16:07:33 +00:00
|
|
|
file, err := os.Open(filename)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
defer file.Close()
|
2014-07-17 08:22:41 +00:00
|
|
|
|
2015-09-10 06:53:19 +00:00
|
|
|
x := &ConfigContainer{data: make(map[string]interface{})}
|
2013-08-21 16:07:33 +00:00
|
|
|
content, err := ioutil.ReadAll(file)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2014-07-17 08:22:41 +00:00
|
|
|
|
2013-08-21 16:07:33 +00:00
|
|
|
d, err := x2j.DocToMap(string(content))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2014-07-17 08:22:41 +00:00
|
|
|
|
2016-03-12 06:32:39 +00:00
|
|
|
x.data = config.ChooseRealValueForMap(d["config"].(map[string]interface{}))
|
2013-08-21 16:07:33 +00:00
|
|
|
return x, nil
|
|
|
|
}
|
|
|
|
|
2015-09-10 06:53:19 +00:00
|
|
|
// ParseData xml data
|
|
|
|
func (xc *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
|
|
|
|
}
|
2015-09-10 06:53:19 +00:00
|
|
|
return xc.Parse(tmpName)
|
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
|
|
|
}
|
|
|
|
|
2015-09-10 06:53:19 +00:00
|
|
|
// ConfigContainer A Config represents the xml 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) {
|
2016-03-12 06:32:39 +00:00
|
|
|
if v := c.data[key]; v != nil {
|
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
|
|
|
return config.ParseBool(v)
|
|
|
|
}
|
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) {
|
2016-03-12 06:32:39 +00:00
|
|
|
return strconv.Atoi(c.data[key].(string))
|
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
|
|
|
// 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) {
|
2016-03-12 06:32:39 +00:00
|
|
|
return strconv.ParseInt(c.data[key].(string), 10, 64)
|
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
|
|
|
// 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) {
|
2016-03-12 06:32:39 +00:00
|
|
|
return strconv.ParseFloat(c.data[key].(string), 64)
|
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
|
|
|
// 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 {
|
2016-03-12 06:32:39 +00:00
|
|
|
if v, ok := c.data[key].(string); ok {
|
2013-08-21 16:07:33 +00:00
|
|
|
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 {
|
2016-03-02 14:44:20 +00:00
|
|
|
v := c.String(key)
|
|
|
|
if v == "" {
|
2016-03-03 12:03:23 +00:00
|
|
|
return nil
|
2016-03-02 14:44:20 +00:00
|
|
|
}
|
|
|
|
return strings.Split(v, ";")
|
2014-01-15 09:19:03 +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
|
|
|
// 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)
|
2016-03-03 12:03:23 +00:00
|
|
|
if v == 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
|
|
|
}
|
|
|
|
|
|
|
|
// 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) {
|
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
|
|
|
if v, ok := c.data[section]; ok {
|
2016-03-12 06:32:39 +00:00
|
|
|
return v.(map[string]string), 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
|
|
|
}
|
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()
|
|
|
|
b, err := xml.MarshalIndent(c.data, " ", " ")
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
_, err = f.Write(b)
|
|
|
|
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("xml", &Config{})
|
2013-08-21 16:07:33 +00:00
|
|
|
}
|