新聞中心
結(jié)構(gòu)體在實(shí)例化時(shí)可以直接對(duì)成員變量進(jìn)行初始化,初始化有兩種形式分別是以字段“鍵值對(duì)”形式和多個(gè)值的列表形式,鍵值對(duì)形式的初始化適合選擇性填充字段較多的結(jié)構(gòu)體,多個(gè)值的列表形式適合填充字段較少的結(jié)構(gòu)體。

創(chuàng)新互聯(lián)專注于通州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供通州營(yíng)銷型網(wǎng)站建設(shè),通州網(wǎng)站制作、通州網(wǎng)頁(yè)設(shè)計(jì)、通州網(wǎng)站官網(wǎng)定制、小程序開(kāi)發(fā)服務(wù),打造通州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供通州網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
使用“鍵值對(duì)”初始化結(jié)構(gòu)體
結(jié)構(gòu)體可以使用“鍵值對(duì)”(Key value pair)初始化字段,每個(gè)“鍵”(Key)對(duì)應(yīng)結(jié)構(gòu)體中的一個(gè)字段,鍵的“值”(Value)對(duì)應(yīng)字段需要初始化的值。
鍵值對(duì)的填充是可選的,不需要初始化的字段可以不填入初始化列表中。
結(jié)構(gòu)體實(shí)例化后字段的默認(rèn)值是字段類型的默認(rèn)值,例如 ,數(shù)值為 0、字符串為 ""(空字符串)、布爾為 false、指針為 nil 等。
1) 鍵值對(duì)初始化結(jié)構(gòu)體的書(shū)寫(xiě)格式
鍵值對(duì)初始化的格式如下:
ins := 結(jié)構(gòu)體類型名{
字段1: 字段1的值,
字段2: 字段2的值,
…
}
下面是對(duì)各個(gè)部分的說(shuō)明:
- 結(jié)構(gòu)體類型:定義結(jié)構(gòu)體時(shí)的類型名稱。
- 字段1、字段2:結(jié)構(gòu)體成員的字段名,結(jié)構(gòu)體類型名的字段初始化列表中,字段名只能出現(xiàn)一次。
- 字段1的值、字段2的值:結(jié)構(gòu)體成員字段的初始值。
鍵值之間以:分隔,鍵值對(duì)之間以,分隔。
2) 使用鍵值對(duì)填充結(jié)構(gòu)體的例子
下面示例中描述了家里的人物關(guān)聯(lián),正如兒歌里唱的:“爸爸的爸爸是爺爺”,人物之間可以使用多級(jí)的 child 來(lái)描述和建立關(guān)聯(lián),使用鍵值對(duì)形式填充結(jié)構(gòu)體的代碼如下:
type People struct {
name string
child *People
}
relation := &People{
name: "爺爺",
child: &People{
name: "爸爸",
child: &People{
name: "我",
},
},
}代碼說(shuō)明如下:
- 第 1 行,定義 People 結(jié)構(gòu)體。
- 第 2 行,結(jié)構(gòu)體的字符串字段。
- 第 3 行,結(jié)構(gòu)體的結(jié)構(gòu)體指針字段,類型是 *People。
- 第 6 行,relation 由 People 類型取地址后,形成類型為 *People 的實(shí)例。
- 第 8 行,child 在初始化時(shí),需要 *People 類型的值,使用取地址初始化一個(gè) People。
提示:結(jié)構(gòu)體成員中只能包含結(jié)構(gòu)體的指針類型,包含非指針類型會(huì)引起編譯錯(cuò)誤。
使用多個(gè)值的列表初始化結(jié)構(gòu)體
Go語(yǔ)言可以在“鍵值對(duì)”初始化的基礎(chǔ)上忽略“鍵”,也就是說(shuō),可以使用多個(gè)值的列表初始化結(jié)構(gòu)體的字段。
1) 多個(gè)值列表初始化結(jié)構(gòu)體的書(shū)寫(xiě)格式
多個(gè)值使用逗號(hào)分隔初始化結(jié)構(gòu)體,例如:
ins := 結(jié)構(gòu)體類型名{
字段1的值,
字段2的值,
…
}
使用這種格式初始化時(shí),需要注意:
- 必須初始化結(jié)構(gòu)體的所有字段。
- 每一個(gè)初始值的填充順序必須與字段在結(jié)構(gòu)體中的聲明順序一致。
- 鍵值對(duì)與值列表的初始化形式不能混用。
2) 多個(gè)值列表初始化結(jié)構(gòu)體的例子
下面的例子描述了一段地址結(jié)構(gòu),地址要求具有一定的順序,例如:
type Address struct {
Province string
City string
ZipCode int
PhoneNumber string
}
addr := Address{
"四川",
"成都",
610000,
"0",
}
fmt.Println(addr)運(yùn)行代碼,輸出如下:
{四川 成都 610000 0}
初始化匿名結(jié)構(gòu)體
匿名結(jié)構(gòu)體沒(méi)有類型名稱,無(wú)須通過(guò) type 關(guān)鍵字定義就可以直接使用。
1) 匿名結(jié)構(gòu)體定義格式和初始化寫(xiě)法
匿名結(jié)構(gòu)體的初始化寫(xiě)法由結(jié)構(gòu)體定義和鍵值對(duì)初始化兩部分組成,結(jié)構(gòu)體定義時(shí)沒(méi)有結(jié)構(gòu)體類型名,只有字段和類型定義,鍵值對(duì)初始化部分由可選的多個(gè)鍵值對(duì)組成,如下格式所示:
ins := struct {
// 匿名結(jié)構(gòu)體字段定義
字段1 字段類型1
字段2 字段類型2
…
}{
// 字段值初始化
初始化字段1: 字段1的值,
初始化字段2: 字段2的值,
…
}
下面是對(duì)各個(gè)部分的說(shuō)明:
- 字段1、字段2……:結(jié)構(gòu)體定義的字段名。
- 初始化字段1、初始化字段2……:結(jié)構(gòu)體初始化時(shí)的字段名,可選擇性地對(duì)字段初始化。
- 字段類型1、字段類型2……:結(jié)構(gòu)體定義字段的類型。
- 字段1的值、字段2的值……:結(jié)構(gòu)體初始化字段的初始值。
鍵值對(duì)初始化部分是可選的,不初始化成員時(shí),匿名結(jié)構(gòu)體的格式變?yōu)椋?/p>
ins := struct {
字段1 字段類型1
字段2 字段類型2
…
}
2) 使用匿名結(jié)構(gòu)體的例子
在本示例中,使用匿名結(jié)構(gòu)體的方式定義和初始化一個(gè)消息結(jié)構(gòu),這個(gè)消息結(jié)構(gòu)具有消息標(biāo)示部分(ID)和數(shù)據(jù)部分(data),打印消息內(nèi)容的 printMsg() 函數(shù)在接收匿名結(jié)構(gòu)體時(shí)需要在參數(shù)上重新定義匿名結(jié)構(gòu)體,代碼如下:
package main
import (
"fmt"
)
// 打印消息類型, 傳入匿名結(jié)構(gòu)體
func printMsgType(msg *struct {
id int
data string
}) {
// 使用動(dòng)詞%T打印msg的類型
fmt.Printf("%T\n", msg)
}
func main() {
// 實(shí)例化一個(gè)匿名結(jié)構(gòu)體
msg := &struct { // 定義部分
id int
data string
}{ // 值初始化部分
1024,
"hello",
}
printMsgType(msg)
}代碼輸出如下:
*struct { id int; data string }
代碼說(shuō)明如下:
- 第 8 行,定義 printMsgType() 函數(shù),參數(shù)為 msg,類型為
*struct{id int data string},因?yàn)轭愋蜎](méi)有使用 type 定義,所以需要在每次用到的地方進(jìn)行定義。 - 第 14 行,使用字符串格式化中的
%T動(dòng)詞,將 msg 的類型名打印出來(lái)。 - 第 20 行,對(duì)匿名結(jié)構(gòu)體進(jìn)行實(shí)例化,同時(shí)初始化成員。
- 第 21 和 22 行,定義匿名結(jié)構(gòu)體的字段。
- 第 24 和 25 行,給匿名結(jié)構(gòu)體字段賦予初始值。
- 第 28 行,將 msg 傳入 printMsgType() 函數(shù)中進(jìn)行函數(shù)調(diào)用。
匿名結(jié)構(gòu)體的類型名是結(jié)構(gòu)體包含字段成員的詳細(xì)描述,匿名結(jié)構(gòu)體在使用時(shí)需要重新定義,造成大量重復(fù)的代碼,因此開(kāi)發(fā)中較少使用。
標(biāo)題名稱:創(chuàng)新互聯(lián)GO教程:Go語(yǔ)言初始化結(jié)構(gòu)體的成員變量
瀏覽路徑:http://m.fisionsoft.com.cn/article/cddpchc.html


咨詢
建站咨詢
