1. 程式人生 > >區塊鏈技術基礎語言(三十):Go語言常用工具包(下)

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