區塊鏈技術基礎語言(三十):Go語言常用工具包(下)
原文連結:區塊鏈技術基礎語言(三十):Go語言常用工具包(下)
一、JSON處理
JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,方便人們閱讀和編寫,也方便程式地解析和生成。雖然JSON是JavaScript的子集,但其格式完全獨立於程式語言,表現為鍵/值對集合的文字描述形式(類似Go語言的字典結構),如圖所示。由於它輕盈、生成這種格式的語言有較為完美的庫,這使得它成為較為理想的、跨平臺、跨語言的資料交換語言。
Go語言對JSON天然地支援。使用Go語言內建的encoding/json 標準庫,開發者可以輕鬆使用Go程式生成和解析JSON格式的資料。
1.1 編碼JSON
開發者可以用 JSON 傳輸簡單的字串、數字、布林值,也可以傳輸一個數組,或者一個更復雜的複合結構,例如字典和結構體。本節就介紹通過結構體、map生成JSON。
1.1.1 通過結構體生成JSON
使用json.Marshal()函式或者json.MarshalIndent()函式可以對結構體型別資料進行JSON格式的編碼。
json.Marshal()函式宣告格式如下:
json.MarshalIndent()函式宣告格式如下:
☛ 1.1.1.1 編碼JSON
將結構體型別資料生成JSON格式資料,結構體成員變數名的首字母必須大寫,否則無法解析。因為編碼JSON的函式屬於json包,如果結構體成員變數小寫,就無法被外部包訪問。
☛ 1.1.1.2 struct tag
將結構體型別資料生成JSON格式資料,結構體成員變數名的首字母必須大寫。但如果要修改欄位名,必須通過struct tag定義來實現。
針對JSON的輸出,我們在定義struct tag的時候需要注意的幾點是:
• 欄位的tag是"-",那麼這個欄位不會輸出到JSON;
• tag中帶有自定義名稱,那麼這個自定義名稱會出現在JSON的欄位名中;
• tag中如果帶有"omitempty"選項,如果該欄位值為空,就不會輸出到JSON中;
• 如果欄位型別是bool, string, int, int64等,而tag中帶有",string"選項,那麼這個欄位在輸出到JSON的時候會把該欄位對應的值轉換成JSON字串。
1.1.2 通過map生成JSON
1.2 解碼JSON
可以使用json.Unmarshal()函式將JSON格式的文字解碼為Go裡面預期的資料結構。
json.Unmarshal()函式的原型如下:
該函式的第一個引數是輸入,即JSON格式的文字(位元序列),第二個引數表示目標輸出容器,用於存放解碼後的值。第二個引數必須是指標,否則解析雖不報錯,但資料無法賦值到目標輸出容器中。
1.2.1 解析到結構體
1.2.2 解析到interface
二、檔案的幾種操作
2.1 檔案的建立
os.Create()和os.NewFile()函式可以建立一個檔案,其函式型別具體如下:
2.2 檔案的開啟
os.Open()和os.OpenFile()函式可以開啟檔案,其函式型別具體如下:
2.3 檔案的資訊寫入
os.Write()、os.WriteAt()和os.WriteString()函式可以開啟檔案,其函式型別具體如下:
2.4 檔案的資訊讀取
os.Read()和os.ReadAt()函式可以開啟檔案,其函式型別具體如下:
2.5 檔案的刪除
參考資料
[1] 許式偉,呂桂華.Go語言程式設計[M].北京:人民郵電出版社,2012:135-140.
[2] https://studygolang.com/pkgdoc
-END-