原文地址:http://blog.csdn.net/fwhezfwhez/article/details/79170645
读取配置文件
config.go
package conf
import (
"bufio"
"io"
"os"
"strings"
)
func InitConfig(path string) map[string]string {
//初始化
myMap := make(map[string]string)
//打开文件指定目录,返回一个文件f和错误信息
f, err := os.Open(path)
//异常处理 以及确保函数结尾关闭文件流
if err != nil {
panic(err)
}
defer f.Close()
//创建一个输出流向该文件的缓冲流*Reader
r := bufio.NewReader(f)
for {
//读取,返回[]byte 单行切片给b
b, _, err := r.ReadLine()
if err != nil {
if err == io.EOF {
break
}
panic(err)
}
//去除单行属性两端的空格
s := strings.TrimSpace(string(b))
//fmt.Println(s)
//判断等号=在该行的位置
index := strings.Index(s, "=")
if index < 0 {
continue
}
//取得等号左边的key值,判断是否为空
key := strings.TrimSpace(s[:index])
if len(key) == 0 {
continue
}
//取得等号右边的value值,判断是否为空
value := strings.TrimSpace(s[index+1:])
if len(value) == 0 {
continue
}
//这样就成功吧配置文件里的属性key=value对,成功载入到内存中c对象里
myMap[key] = value
}
return myMap
}
main.go
package main
import (
"conf"
"fmt"
)
func main() {
//导入配置文件
configMap := conf.InitConfig("src/db_configuration.txt")
//获取配置里host属性的value
fmt.Println(configMap["host"])
//查看配置文件里所有键值对
fmt.Println(configMap)
}
db_configuration.txt
host=localhost
port=5432
user=postgres
passwor=123
dbname=test
结果:
localhost
map[port:5432 user:postgres passwor:123 dbname:test host:localhost]
注:
值得注意的是:路径可以写绝对路径和相对路径,即db_configuration.txt的位置如果是放在工程下和src同级,则”src/db_configuration.txt”,如果放在随便一个地方,就得写全路径”G:\java_workspace\test_config\src\db_configuration.txt”,斜杠要转义
其实/和\等价,左斜杠不需要转义