Go語言的結構體

2021-09-10 14:58:56 字數 1367 閱讀 1107

與c相同,go的結構體是零個或多個任意型別的命名變數組合在一起的聚合資料型別,每個變數叫做結構體的成員。結構體的每個成員都通過點號來訪問。

定義結構體時,成員通常一行寫乙個,但相同型別的成員也可以寫在同一行上。但需要注意的是:成員的順序對於結構體同一性很重要,如果我們將變數的定義順序調換或者將本來單行定義的變數寫成同一行(或反之),那麼我們就會定義乙個不同的結構體型別。

命名結構體型別不可以定義乙個擁有相同結構體型別的成員,也就是乙個聚合型別不可以包含它自己(對陣列也同樣適用)。但結構體s可以包含乙個s型別的指標,即*s。

初始化結構體有兩種方式,一種不需指明成員,但要求按照正確的順序為每乙個成員指定乙個值。這種方式會給開發和閱讀**的人增加負擔,因為他們必須記住每個成員的順序,另外這也使得未來結構體成員擴充或者重新排列的時候**維護性差。所以這種格式一般用在定義結構體型別的包中或者一些有明顯成員順序約定的小結構體中。第二種方式需要指明成員名稱來初始化,但可以只初始化部分成員,未指明的成員則會自動初始化為對應型別的預設值。

type vertex struct 

func main() // v := vertex

fmt.println(v.x, v.y)

}

go的結構體支援巢狀,如下:

type point struct 

type circle struct

type wheel

結構體巢狀對**重用性有很大幫助,但訪問wheel成員就變得比較麻煩:

var w wheel

w.circle.center.x = 1

w.circle.center.y = 1

w.circle.radius = 1

w.spokes = 8

我們可以直接訪問我們需要的變數而不是指定一大串中間變數:

var w wheel

w.x = 1

w.y = 1

w.radius = 1

w.spokes = 8

上述語法糖並不能在初始化結構體型別的變數時使用,因此我們必須嚴格按照前述的兩種初始化方式來對巢狀的結構體進行初始化:

w = wheel, 1}, 8}

w = wheel, radius:8}}

go語序可以定義不帶名稱的結構體成員,只需要指定型別即可,這種結構體成員叫做匿名成員,匿名成員的型別必須是乙個命名型別或者指向命名型別的指標。使用匿名成員,將結構體定義改為下面這樣:

type circle struct 

type wheel

本文部分內容摘自《go程式語言》

go語言結構體

go語言陣列可以儲存同一型別的資料 但在結構體中我們可以為不同項定義不同的資料型別 結構體是由一系列具有相同的型別或者不同型別的資料構成的資料集合 1.定義結構體 結構體定義需要使用type和struct語句。struct語句定義乙個新的資料型別,結構體中有乙個或者多個成員。type語句設定了結構體...

GO語言結構體

go語言的struct和c語言的很相似 簡單的struct定義 package main import fmt type test struct func main fmt.println a 或者 package main import fmt type test struct func main...

Go語言 結構體

一 定義結構體及其三種初始化 示例程式 package main import fmt type books struct func main 也可以使用key value 格式 fmt.println books 忽略的字段為0或空 fmt.println books 執行結果 二 訪問結構體及將...