记录配置文件在 Go 语言的应用
JSON
模板 JSON 文件如下
{
"year":{
"minyear": 2012,
"maxyear": 2022
},
"month":{
"January": "",
"February": ""
}
}
首先观察一个这个 JSON 文件
想取出获取这个 JSON 文件的内容,我们应该做如下几个操作
- 打开文件
- 读取文件内容
- 对内容进行解析
打开文件
首先打开文件
//filePath is your config file path
file, err := os.Open(filePath)
if err != nil {
log.Println(err)
return nil, errors.New("open error")
}
defer file.Close()
这里我们获取到一个 *os.File 的对象 file
读取文件
将打开的 file 写入我们已定义的类型中,我们可以应用 map[string]interface{} 存放
var jsonData map[string]interface{}
//the type of jsoned is []byte
jsoned, err := ioutil.ReadAll(file)
if err != nil {
log.Panicln(err)
return nil, errors.New("read error")
}
//need unmarshal
err = json.Unmarshal(jsoned, &jsonData)
if err != nil {
log.Println(err)
return nil, errors.New("unmarshal error")
}
现在我们就将 JSON 文件导入到了我们的类型为 map[string]interface{} 的对象中
解析数据
我们知道我们获得的 map[string]interface{} 中 key 的类型为 string ,value 的类型是 interface{} 。
但是要想获得 interface{} 的内容, 我们需要先进行一步类型断言。
我们可以通过 reflect 包查看以下类型
yearMap := dateMap["year"]
fmt.Println(reflect.TypeOf(yearMap))
可以得到类型为 map[string]interface{}
yearMap := dateMap["year"].(map[string]interface{})
//number is float64 in go
yearDataMao := yearMap["minyear"].(float64)
获得结果 2012。