Beego學習筆記——Config

本文爲轉載,原文地址:Beego學習筆記——Configgit

配置文件解析

這是一個用來解析文件的庫,它的設計思路來自於database/sql,目前支持解析的文件格式有ini、json、xml、yaml,能夠經過以下方式進行安裝:github

go get github.com/astaxie/beego/config

如何使用

首先初始化一個解析器對象sql

iniconf, err := NewConfig("ini", "testini.conf")
if err != nil {
    t.Fatal(err)
}

而後經過對象獲取數據json

iniconf.String("appname")

 

解析器對象支持的函數有以下:app

Set(key, val string) error 
String(key string) string 
Int(key string) (int, error) 
Int64(key string) (int64, error) 
Bool(key string) (bool, error) 
Float(key string) (float64, error) 
DIY(key string) (interface{}, error)
View Code
 
接下來看看在咱們的學習中怎麼去使用這個模塊,下面咱們將接着上次的文章繼續。
首先咱們在根目錄下新建個配置文件,取名爲app.conf,在上面簡單寫幾條配置信息
appname="beegotest"
pageoffset=20
而後在根目錄建立個utils的文件夾,在其中增長一個go文件,名爲bconfig.go,這個文件是咱們用來初始化配置信息的。代碼以下
package utils

import (
       "github.com/astaxie/beego/config"
       "fmt"
)
var BConfig config.Configer
func init(){
       var err error
       BConfig, err = config.NewConfig("ini", "app.conf")
       if err != nil{
              fmt.Println("config init error:", err)
       }
}
在這裏,咱們須要引入 " github.com/astaxie/beego/config
        由於在咱們的初始化函數中用到庫中的NewConfig函數,該函數的第一個參數爲adaptername, 這裏咱們就默認傳「ini」,第二個參數爲配置文件名,咱們前面建的文件叫app.conf,因此這裏傳「app.conf」便可。
        其中BConfig即是咱們初始化的Config對象,是個全局的變量,方便後面的調用。至此,咱們的配置初始化便完成了。
        配置的使用就是上面提到的幾個函數了。這裏咱們爲咱們定義的命令格式爲: getconf -type key,其做用爲獲取類型爲type的Key的值,另外個爲setconf key val,其做用是設置key的值爲val。具體函數以下:
GetConfig
func GetConfig(args []string)int{
       if args[1] == "-int"{
              intConf, err := utils.BConfig.Int(args[2])
              if err != nil{
                     fmt.Println("get type of int from config error:",err)
              }else {
                     fmt.Println(intConf)
              }
       }else if args[1] == "-int64"{
              int64Conf, err := utils.BConfig.Int64(args[2])
              if err != nil{
                     fmt.Println("get type of int64 from config error:",err)
              }else {
                     fmt.Println(int64Conf)
              }
       }else if args[1] == "-bool"{
              boolConf, err := utils.BConfig.Bool(args[2])
              if err != nil{
                     fmt.Println("get type of bool from config error:",err)
              }else {
                     fmt.Println(boolConf)
              }
       }else if args[1] == "-float"{
              floatConf, err := utils.BConfig.Float(args[2])
              if err != nil{
                     fmt.Println("get type of flaot from config error:",err)
              }else {
                     fmt.Println(floatConf)
              }
       }else if args[1] == "-int64"{
              intConf, err := utils.BConfig.Int(args[2])
              if err != nil{
                     fmt.Println("get type of int from config error:",err)
              }else {
                     fmt.Println(intConf)
              }
       }else {
              fmt.Println(utils.BConfig.String(args[2]))
       }
       return 0
}
View Code

 

  
SetConfig
func SetConfig(args []string)int{
       err := utils.BConfig.Set(args[1], args[2])
       if err != nil{
              fmt.Println("set config error:", err)
       }else{
              fmt.Println("set config success")
       }
       return 0
}
View Code

 

main.go文件中也須要作適當的調整,來調用上面兩個函數。完整的代碼以下:
package main

import (
       "bufio"
       "fmt"
       "os"
       "strings"
       _"beegotest/utils"
       "beegotest/utils"
)

func main() {
       r := bufio.NewReader(os.Stdin)
       handlers := GetCommandHandlers()
       Help(nil)

       for {
              fmt.Print("Command> ")
              b, _, _ := r.ReadLine()
              line := string(b)
              tokens := strings.Split(line, " ")

              if handler, ok := handlers[tokens[0]]; ok{
                     ret := handler(tokens)
                     if ret != 0{
                            break
                     }
              }else {
                     fmt.Println("Unknown Command:", tokens[0])
              }
       }
}

func GetCommandHandlers() map[string]func(args []string) int {
       return map[string]func([]string) int{
              "help": Help,
              "h":    Help,
              "quit" : Quit,
              "q":Quit,
              "getconf":GetConfig,
              "setconf":SetConfig,
       }
}

func Help(args []string) int {
       fmt.Println(`Command:
       help(h)
       quit(q)
       getconf -type key
       setconf key val
       `)
       return 0
}

func Quit(args []string) int{
       return 1
}

func GetConfig(args []string)int{
       if args[1] == "-int"{
              intConf, err := utils.BConfig.Int(args[2])
              if err != nil{
                     fmt.Println("get type of int from config error:",err)
              }else {
                     fmt.Println(intConf)
              }
       }else if args[1] == "-int64"{
              int64Conf, err := utils.BConfig.Int64(args[2])
              if err != nil{
                     fmt.Println("get type of int64 from config error:",err)
              }else {
                     fmt.Println(int64Conf)
              }
       }else if args[1] == "-bool"{
              boolConf, err := utils.BConfig.Bool(args[2])
              if err != nil{
                     fmt.Println("get type of bool from config error:",err)
              }else {
                     fmt.Println(boolConf)
              }
       }else if args[1] == "-float"{
              floatConf, err := utils.BConfig.Float(args[2])
              if err != nil{
                     fmt.Println("get type of flaot from config error:",err)
              }else {
                     fmt.Println(floatConf)
              }
       }else if args[1] == "-int64"{
              intConf, err := utils.BConfig.Int(args[2])
              if err != nil{
                     fmt.Println("get type of int from config error:",err)
              }else {
                     fmt.Println(intConf)
              }
       }else {
              fmt.Println(utils.BConfig.String(args[2]))
       }
       return 0
}

func SetConfig(args []string)int{
       err := utils.BConfig.Set(args[1], args[2])
       if err != nil{
              fmt.Println("set config error:", err)
       }else{
              fmt.Println("set config success")
       }
       return 0
}
View Code

運行結果以下:ide

相關文章
相關標籤/搜索