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
}

使用這個方法我們就獲取了配置參數的對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章