【鏈塊技術48期】區塊鏈技術基礎語言(三十):Go語言常用工具包(下)

原文鏈接:區塊鏈技術基礎語言(三十):Go語言常用工具包(下)

一、JSON處理

JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,方便人們閱讀和編寫,也方便程序地解析和生成。雖然JSON是JavaScript的子集,但其格式完全獨立於編程語言,表現爲鍵/值對集合的文本描述形式(類似Go語言的字典結構),如圖所示。由於它輕盈、生成這種格式的語言有較爲完美的庫,這使得它成爲較爲理想的、跨平臺、跨語言的數據交換語言。

Go語言對JSON天然地支持。使用Go語言內置的encoding/json 標準庫,開發者可以輕鬆使用Go程序生成和解析JSON格式的數據。

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 JSON處理 1.0.0.0.png

 

1.1 編碼JSON

開發者可以用 JSON 傳輸簡單的字符串、數字、布爾值,也可以傳輸一個數組,或者一個更復雜的複合結構,例如字典和結構體。本節就介紹通過結構體、map生成JSON。

1.1.1 通過結構體生成JSON

使用json.Marshal()函數或者json.MarshalIndent()函數可以對結構體類型數據進行JSON格式的編碼。

json.Marshal()函數聲明格式如下:

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 通過結構生成JSON 1.1.1.0-a.png

json.MarshalIndent()函數聲明格式如下:

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 通過結構生成JSON 1.1.1.0-b.png

☛ 1.1.1.1 編碼JSON

將結構體類型數據生成JSON格式數據,結構體成員變量名的首字母必須大寫,否則無法解析。因爲編碼JSON的函數屬於json包,如果結構體成員變量小寫,就無法被外部包訪問。

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 編碼JSON處理 1.1.1.1.jpg

☛ 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字符串。

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 struct tag 1.1.1.2-a.png

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 struct tag 1.1.1.2-b.png

1.1.2 通過map生成JSON

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 通過map生成JSON 1.1.2.0.png

 

1.2 解碼JSON

可以使用json.Unmarshal()函數將JSON格式的文本解碼爲Go裏面預期的數據結構。

json.Unmarshal()函數的原型如下:

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 解碼JSON 1.2.0.0.png

該函數的第一個參數是輸入,即JSON格式的文本(比特序列),第二個參數表示目標輸出容器,用於存放解碼後的值。第二個參數必須是指針,否則解析雖不報錯,但數據無法賦值到目標輸出容器中。

1.2.1 解析到結構體

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 解析到結構體 1.2.1.0.jpg

1.2.2 解析到interface

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 解析到interface 1.2.2.0.jpg

 

二、文件的幾種操作

 

2.1 文件的創建

os.Create()和os.NewFile()函數可以創建一個文件,其函數類型具體如下:

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 文件的創建 2.1.0.0-a.png

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 文件的創建 2.1.0.0-b.png

 

2.2 文件的打開

os.Open()和os.OpenFile()函數可以打開文件,其函數類型具體如下:

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 文件的打開 2.2.0.0-a.png

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 文件的打開 2.2.0.0-b.png

 

2.3 文件的信息寫入

os.Write()、os.WriteAt()和os.WriteString()函數可以打開文件,其函數類型具體如下:

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 文件的信息寫入 2.3.0.0-a.png

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 文件的信息寫入 2.3.0.0-b.png

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 文件的信息寫入 2.3.0.0-c.png

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 文件的信息寫入 2.3.0.0-d.png

 

2.4 文件的信息讀取

os.Read()和os.ReadAt()函數可以打開文件,其函數類型具體如下:

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 文件的信息讀取 2.4.0.0-a.png

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 文件的信息讀取 2.4.0.0-b.png

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 文件的信息讀取 2.4.0.0-c.png

 

2.5 文件的刪除

區塊鏈技術教程 區塊鏈技術語言(三十) Go語言常用工具包 文件的刪除 2.5.png

 

參考資料

[1] 許式偉,呂桂華.Go語言編程[M].北京:人民郵電出版社,2012:135-140.

[2] https://studygolang.com/pkgdoc

 

-END-

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章