Go获取解析本地Config配置文件

Go获取解析本地Config配置文件

学习了Go语言后,打算利用最近比较空一点,写一个前端部署工具,不需要每次都复制粘贴的麻烦,我们希望再工具打包后,还可以在外面配置参数,所以我们在本地放一个config.txt文件用于配置

这是本地配置文件内容

LocalUser=123
LocalPassWord=123
LocalHost=192.168.2.52
LocalPort=22
LocalLocalPath=C:/AStack/NewAStack/dist
LocalRemotePath=D:/softwares/dist
TestUser=root
TestPassWord=Dafeng@2698
TestHost=47.99.93.122
TestPort=22
TestLocalPath=C:/AStack/NewAStack/dist
TestRemotePath=/home/dist
ProdUser=
ProdPassWord=
ProdHost=
ProdPort=22
ProdLocalPath=C:/AStack/NewAStack/dist
ProdRemotePath=D:/softwares/dist

直接看代码(注释清晰)

//创建了一个结构体,里面分别是本地服务器/测试服/正式服的一些部署需要的信息
//这里字段必须是大写开头,因为接下来需要用反射给属性赋值,大写才可以取到
type Config struct {
	LocalUser string
	LocalPassWord string
	LocalHost string
	LocalPort int
	LocalLocalPath string
	LocalRemotePath string
	TestUser string
	TestPassWord string
	TestHost string
	TestPort int
	TestLocalPath string
	TestRemotePath string
	ProdUser string
	ProdPassWord string
	ProdHost string
	ProdPort int
	ProdLocalPath string
	ProdRemotePath string
}

func GetConfig() Config {
//创建一个空的结构体,将本地文件读取的信息放入
  	c := &Config{}
  	//创建一个结构体变量的反射
	cr := reflect.ValueOf(c).Elem()
	//打开文件io流
  	f,err := os.Open("./config.txt")
	if err != nil {
		log.Fatal(err)
	}
	defer func() {
		if err = f.Close(); err != nil {
			log.Fatal(err)
		}
	}()
	//我们要逐行读取文件内容
	s := bufio.NewScanner(f)
	for s.Scan() {
	//以=分割,前面为key,后面为value
		var str = s.Text()
		var index = strings.Index(str,"=")
		var key = str[0:index]
		var value = str[index + 1:]
		//因为Port是int,所以我们这里要将截取的string强转成int
		if strings.Contains(key,"Port") {
			var i,err = strconv.Atoi(value)
			if err != nil {
				panic(err)
			}
			//通过反射将字段设置进去
			cr.FieldByName(key).Set(reflect.ValueOf(i))
		}else {
		//通过反射将字段设置进去
			cr.FieldByName(key).Set(reflect.ValueOf(value))
		}

	}
	err = s.Err()
	if err != nil {
		log.Fatal(err)
	}
	//返回Config结构体变量
	return *c
}

使用这个方法我们就获取了配置参数的对象

你可能感兴趣的:(go,golang,读取文件,go)