原文鏈接:區塊鏈技術基礎語言(三十):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-