問題簡介
go語言標準庫匯總內置了對 json 文件的處理,非常方便,最近在寫一個應用的時候,需要從 json 文件中載入 配置,由于是 go 新手,忽略一個細節,導致載入內容始終為空
代碼演示
代碼是最好的說明載體
package configtype config struct{a string `json:"a"`b string `json:"a"`
}
func Load(file string)(*config, error){c = &config{}file, err := os.Open(file)if err != nil {//file open failed todo }jsonParser := json.NewDecoder(file)err = jsonParser.Decode(c)//c 的值是多少
}
結論
看到上面的代碼,大家會覺著c 是否賦值成功了呢?
事實上,不成功, json 文件解析成功但是最終賦值失敗
原因其實非常簡單
go 不同包中的變量 函數 方法訪問,區分訪問權限的就是 變量 函數 方法的首字母是否大寫 如果是大寫,可以在其他包被訪問
這個問題中,json 包和 config 不是同一個包,訪問失敗,不能 set
a b 必須改寫為大寫才可以賦值
思考
之所以 config 中的 filed 設置為小寫 是想做訪問控制,如果堅持小寫,如何給 config 的 field 賦值?