go写api接口之读取配置文件

一般都是把配置文件放在config目录下的app.conf,那么怎么读取这个配置文件呢?

方法一

利用go自带的os库操作
这种读取直接把值转为string

package conf 
import (
    "strings"
    "bufio"
    "os"
)
const (
    FN="./config/app.conf"
)
//str配置文件中的key
func Get(str string) string{
    f, err := os.Open(FN)
    defer f.Close()
    if err != nil {
        os.Exit(-1)
    }
    buf := bufio.NewReader(f)
    for {
        line, _ := buf.ReadString('\n')
        line = strings.TrimSpace(line)
        strs:=strings.Split(line,"=")
        if strings.TrimSpace(strs[0])==str{
            return strings.TrimSpace(strs[1])
        }
    }
    return ""
}

使用:

conf.Get("db_user")

方法二

这种读取可以直接把值转为string、int类型
https://github.com/go-ini/ini

package tools
import (
    "log"
    "github.com/go-ini/ini"
)
type IniConfig struct {
    conf *ini.File
}
func (self *IniConfig) Load(filename string) {
    conf, err := ini.Load(filename)
    if err != nil {
        log.Fatal(err)
    }
    self.conf = conf
}
func (self *IniConfig) GetString(key string) string {
    return self.GetSectionString("", key)
}
func (self *IniConfig) GetInt64(key string) int64 {
    return self.GetSectionInt64("", key)
}
func (self *IniConfig) GetSectionString(section string, key string) string {
    if self.conf == nil {
        return ""
    }
    s := self.conf.Section(section)
    return s.Key(key).String()
}
func (self *IniConfig) GetSectionInt64(section string, key string) int64 {
    if self.conf == nil {
        return 0
    }
    s := self.conf.Section(section)
    v, _ := s.Key(key).Int64()
    return v
}
var Config *IniConfig
func init() {
    Config = &IniConfig{}
}
func LoadConfig(filename string) {
    Config.Load(filename)
}

使用:

tools.LoadConfig("conf/app.conf")
ssdb_host := tools.Config.GetString("ssdb.host")
    原文作者:奔跑的图腾
    原文地址: https://www.jianshu.com/p/fe8b799cc578
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞