Go語言初始化結構體的幾種方式

2021-10-19 13:38:37 字數 2310 閱讀 8193

結構體在例項化時可以直接對成員變數進行初始化,初始化有兩種形式分別是以字段「鍵值對」形式和多個值的列表形式,鍵值對形式的初始化適合選擇性填充欄位較多的結構體,多個值的列表形式適合填充欄位較少的結構體。

使用「鍵值對」初始化結構體

結構體可以使用「鍵值對」(key value pair)初始化字段,每個「鍵」(key)對應結構體中的乙個字段,鍵的「值」(value)對應字段需要初始化的值。

鍵值對的填充是可選的,不需要初始化的字段可以不填入初始化列表中。

結構體例項化後字段的預設值是字段型別的預設值,例如 ,數值為 0、字串為 「」(空字串)、布林為 false、指標為 nil 等。

鍵值對初始化結構體的書寫格式

鍵值對初始化的格式如下:

ins := 結構體型別名

下面是對各個部分的說明:

結構體型別:定義結構體時的型別名稱。

欄位1、欄位2:結構體成員的欄位名,結構體型別名的字段初始化列表中,欄位名只能出現一次。

欄位1的值、欄位2的值:結構體成員欄位的初始值。

鍵值之間以:分隔,鍵值對之間以,分隔。

使用鍵值對填充結構體的例子

下面示例中描述了家裡的人物關聯,正如兒歌裡唱的:「爸爸的爸爸是爺爺」,人物之間可以使用多級的 child 來描述和建立關聯,使用鍵值對形式填充結構體的**如下:

type people struct 

relation := &people,

},}

**說明如下:

使用多個值的列表初始化結構體

go語言可以在「鍵值對」初始化的基礎上忽略「鍵」,也就是說,可以使用多個值的列表初始化結構體的字段。

多個值列表初始化結構體的書寫格式

多個值使用逗號分隔初始化結構體,例如:

ins := 結構體型別名

使用這種格式初始化時,需要注意:

必須初始化結構體的所有字段。

每乙個初始值的填充順序必須與字段在結構體中的宣告順序一致。

鍵值對與值列表的初始化形式不能混用。

2) 多個值列表初始化結構體的例子

下面的例子描述了一段位址結構,位址要求具有一定的順序,例如:

type address struct 

addr := address

fmt.println(addr)

執行**,輸出如下:

初始化匿名結構體

匿名結構體沒有型別名稱,無須通過 type 關鍵字定義就可以直接使用。

匿名結構體定義格式和初始化寫法

匿名結構體的初始化寫法由結構體定義和鍵值對初始化兩部分組成,結構體定義時沒有結構體型別名,只有欄位和型別定義,鍵值對初始化部分由可選的多個鍵值對組成,如下格式所示:

ins := struct

下面是對各個部分的說明:

欄位1、欄位2……:結構體定義的欄位名。

初始化欄位1、初始化欄位2……:結構體初始化時的欄位名,可選擇性地對字段初始化。

字段型別1、字段型別2……:結構體定義欄位的型別。

欄位1的值、欄位2的值……:結構體初始化欄位的初始值。

鍵值對初始化部分是可選的,不初始化成員時,匿名結構體的格式變為:

ins := struct

使用匿名結構體的例子

在本示例中,使用匿名結構體的方式定義和初始化乙個訊息結構,這個訊息結構具有訊息標示部分(id)和資料部分(data),列印訊息內容的 printmsg() 函式在接收匿名結構體時需要在引數上重新定義匿名結構體,**如下:

package mainimport (    "fmt")// 列印訊息型別, 傳入匿名結構體

func printmsgtype(msg *struct )

func main()

printmsgtype(msg)}

**輸出如下:

*struct

**說明如下:

第 8 行,定義 printmsgtype() 函式,引數為 msg,型別為*struct,因為型別沒有使用 type 定義,所以需要在每次用到的地方進行定義。

第 14 行,使用字串格式化中的%t動詞,將 msg 的型別名列印出來。

第 20 行,對匿名結構體進行例項化,同時初始化成員。

第 21 和 22 行,定義匿名結構體的字段。

第 24 和 25 行,給匿名結構體欄位賦予初始值。

第 28 行,將 msg 傳入 printmsgtype() 函式中進行函式呼叫。

匿名結構體的型別名是結構體包含字段成員的詳細描述,匿名結構體在使用時需要重新定義,造成大量重複的**,因此開發中較少使用。

go結構體初始化 Go語言初始化結構體的成員變數

結構體在例項化時可以直接對成員變數進行初始化,初始化有兩種形式分別是以字段 鍵值對 形式和多個值的列表形式,鍵值對形式的初始化適合選擇性填充欄位較多的結構體,多個值的列表形式適合填充欄位較少的結構體。使用 鍵值對 初始化結構體 結構體可以使用 鍵值對 key value pair 初始化字段,每個 ...

結構體初始化的幾種方式

結構體初始化方式有3種 結構體定義如下 1 struct obj type 2 第1種,位置對應賦值 位置對應必須按序列出 1 struct obj type obj 2 按序未列出的即無關引數,但預設引數必須是排在最後 struct obj type obj 第2種,點號訪問賦值 點號訪問可以指哪...

C語言結構體初始化的方式

結構體變數的初始化的四種形式,其中第四種形式是寫本次部落格目的,暫且mark一下。include typedef struct cm handlers t 定義函式handle void handle int a int b 宣告cm handlers t型別的結構體變數,同時賦初值 if 0 方法...