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
}
使用這個方法我們就獲取了配置參數的對象