一般都是把配置文件放在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")