區塊鏈基礎語言(二十)——Go語言結構體
1
結構體概述
Go語言結構體是一種聚合的資料型別,由一系列具有相同型別或不同型別的資料構成的資料集合。
結構體的宣告格式如圖1所示,內部沒有關鍵詞var,每個資料稱為結構體成員。例如,圖1所示,利用結構體表示法,以一個班級為單位,記錄這個班的班級名稱,統計班級的總人數、男女生人數。
定義一個結構體需要用到兩個關鍵詞:type和struct。大括號內部是結構體型別的成員變數和變數型別。
2
結構體初始化
結構體的初始化,就是給結構體成員變數賦初值。結構體是由一系列具有相同型別或不同型別的資料(結構體成員)構成的資料集合。如果沒有對結構體變數賦值、或者部分結構體成員變數沒有被賦值,那麼沒有被賦值的成員變數取其對應型別的零值。
如果一個變數直接指向記憶體空間記憶體儲的結構體型別值,那麼這個變數就是結構體型別變數;如果一個變數儲存的是指向結構體型別值的記憶體空間地址,這個變數就是結構體指標型別變數。
2.1 結構體型別變數的初始化
對一個結構體型別變數進行初始化有兩種方式,如表1所示。

2.2 結構體指標型別變數的初始化
結構體指標型別變數的初始化方式和結構體型別變數的初始化方式類似。結構體指標型別就是在結構體型別之前加上“*”,賦值時在賦值之前加上取地址符“&”。同樣,它有順序初始化和指定成員初始化兩種賦值方式。
3
匿名欄位
結構體裡的成員只有型別,沒有變數名,這樣的欄位被稱為匿名欄位。
雖然匿名欄位沒有名稱,但本質上是以型別名為名稱的欄位。

4
結構體成員的呼叫
4.1 結構體型別變數的成員呼叫
呼叫結構體型別變數的成員,需要用到點操作符“.”,即:
對被呼叫的結構體變數成員,既可以對其賦初值,也可以對它的值進行修改。

4.2 指標變數的成員的呼叫
對指標變數的成員呼叫方式有兩種,如表2所示。


5
結構體型別變數的比較和賦值
5.1 結構體型別變數的比較
結構體型別變數可以使用“==”或“!=”運算子進行比較,但不支援“>”或“<”。
當兩個結構體型別變數型別相同,相應的成員變數值相等,這兩個結構體型別變數相等;否則,結構體型別變數不相等。

5.2 結構體型別變數的賦值
兩個結構體型別變數型別相同,這兩個變數可以相互賦值。

6
結構體型別變數作為函式引數
6.1 值傳遞
結構體是值型別,結構體型別變數作為函式引數,呼叫函式時將實際引數複製一份傳遞到函式中,在函式中對引數進行修改,實際引數不會受影響。

6.2 引用傳遞
將結構體型別變數的地址作為實際引數進行傳遞,在函式呼叫時實參傳遞到函式,在函式中對引數進行的修改,對實際引數有影響。

ofollow,noindex">原文連結:區塊鏈技術語言(二十)——Go語言結構體
參考資料
[1] 許式偉,呂桂華.Go語言程式設計[M].北京:人民郵電出版社,2012:68.
本文完,獲取更多資訊,敬請關注區塊鏈工程師。
來源:鏈塊學院
本文由布洛克專欄作者釋出,代表作者觀點,版權歸作者所有,不代表布洛克科技觀點
——TheEnd——
關注“布洛克科技”