go读取配置(一)

一.配置文件config.txt中的内容如下:

[default]
path= ./go
version = 1.44
 
[test]
num = 666
something  = wrong  #注释1
#fdfdfd = fdfdfd    注释整行
refer= refer       //注释3


二.main.go内容如下($GOPATH+my_test/config/)

package main



import (

        "fmt"

"my_test/config/my_conf"

        //同一目录下只能在一个包,不同包要放到不同目录下,这个表示在

       //$GOPATH+my_test/config/my_conf/目录下找包

)


func main() {
myConfig := new(conf.Config)
myConfig.InitConfig("./config.txt")
fmt.Println(myConfig.Read("default", "path"))
fmt.Printf("%v", myConfig.Mymap)

}



一.与main.go同目录下有my_conf目录,在这个目录下有conf.go文件,内容如下:


package conf



import (
"bufio"
"io"
"os"
"strings"
)


const middle = "****"


type Config struct {
Mymap  map[string]string
strcet string
}


func (c *Config) InitConfig(path string) {
c.Mymap = make(map[string]string)


f, err := os.Open(path)
if err != nil {
panic(err)
}
defer f.Close()


r := bufio.NewReader(f)
for {
b, _, err := r.ReadLine()
if err != nil {
if err == io.EOF {
break
}
panic(err)
}


s := strings.TrimSpace(string(b))
//fmt.Println(s)
if strings.Index(s, "#") == 0 {
continue
}


n1 := strings.Index(s, "[")
n2 := strings.LastIndex(s, "]")
if n1 > -1 && n2 > -1 && n2 > n1+1 {
c.strcet = strings.TrimSpace(s[n1+1 : n2])
continue
}


if len(c.strcet) == 0 {
continue
}
index := strings.Index(s, "=")
if index < 0 {
continue
}


frist := strings.TrimSpace(s[:index])
if len(frist) == 0 {
continue
}
second := strings.TrimSpace(s[index+1:])


pos := strings.Index(second, "\t#")
if pos > -1 {
second = second[0:pos]
}


pos = strings.Index(second, " #")
if pos > -1 {
second = second[0:pos]
}


pos = strings.Index(second, "\t//")
if pos > -1 {
second = second[0:pos]
}


pos = strings.Index(second, " //")
if pos > -1 {
second = second[0:pos]
}


if len(second) == 0 {
continue
}


key := c.strcet + middle + frist
c.Mymap[key] = strings.TrimSpace(second)
}
}


func (c  *Config) Read(node, key string) string {
key = node + middle + key
v, found := c.Mymap[key]
if !found {
return ""
}
return v

}

猜你喜欢

转载自blog.csdn.net/u014230625/article/details/80694871