go語言通過用自定義的方式形成新的型別,結構體是型別中帶有成員的符合型別。go語言使用結構體和結構體成員來描述真實世界的實體和實體對應的各種屬性。
go語言中的型別可以被是理化,使用new
或&
構造的型別實力的型別是型別的指標。
結構體成員是由一系列的成員變數構成,這些成員變數也被稱為「字段」。欄位有以下特性:
go語言的關鍵字type
可以將各種基本型別定義為自定義型別,基本型別包括整型、字串、布林等。結構體是一種復合的基本型別,通過type定義為自定義型別後,使結構體更便於使用。
結構體的定義格式如下:
type 型別名 struct
使用結構體可以表示乙個包含x 和y整型分量的點結構,**如下:
type point struct
同型別的變數也可以寫在一行。顏色的紅、綠、藍3個分量可以使用byte型別表示,定義的顏色將誒鉤體如下:
type color struct
結構體本身是一種型別,以var的方式宣告結構體即可完成例項化。
基本例項化格式如下:
var ins t
type point struct
var p point
p.x =
10p.y =
20
使用.
來訪問結構體的成員變數。
go語言中,還可以使用new
關鍵字對型別(包括結構體、整型、浮點數、字串等)進行例項化,結構體在例項化後會形成指標型別的結構體。
使用new
的格式如下:
ins :=
new(t)
下面的例子定義了乙個玩家(player)的結構體,玩家擁有名字、生命值和魔法值,例項化玩家(player)結構體後,可對成員進行賦值,**如下:
type player struct
tank :=
new(player)
tank.name =
"canon"
tank.healthpoint =
300
ins :=
&t
type command struct
var version int=1
cmd :=
&command
cmd.name =
"version"
cmd.var =
&version
cmd.comment =
"show version"
func
newcommand
(name string
, varref *
int, comment string
)*command
}cmd =
newcommand
("version"
,&version,
"show version',
)
結構體在例項化時可以直接對成員變數進行初始化。初始化有兩種形式:一種是字段「鍵值對」形式及多個值的列表形式。鍵值對形式的初始化適合選擇性填充欄位較多的結構體;多個值的列表形式適合填充欄位較少的結構體。
結構體可以使用「鍵值對」(key value pair)初始化字段,每個「鍵」(key)對應結構體中的乙個字段,鍵的「值」(value)對應字段需要初始化的值。
鍵值對的填充是可選的,不需要初始化的字段可以不填入初始化列表中。
結構體例項化後字段的預設值是字段型別的預設值。
1. 鍵值對初始化結構體的書寫格式
鍵值對初始化的格式如下:
ins := 結構體型別名
2. 使用鍵值對填充結構體的例子
人物之間可以使用多級的child
來描述和建立關聯。使用鍵值對形式填充結構體的**如下:
type people struct
relation :=
&people ,}
,}
1. 多個值列表初始化結構體的書寫格式
多個值使用逗號初始化結構體,例如:
ins := 結構體型別名
使用這種格式初始化時,需要注意:
2. 多個值列表初始化結構體的例子
type address struct
addr := address
fmt.
println
(addr)
C 學習筆記6 結構體struct
struct 語句定義了乙個包含多個成員的新的資料型別,格式如下 struct type name object names type name 是結構體型別的名稱,member type1 member name1 是標準的變數定義,比如 int i。在結構定義的末尾,最後乙個分號之前,您可以指定...
什麼結構體 struct
簡單的來說,結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別,第二相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而結構體是 陣列名稱...
定義結構體 struct
於 鏈結,struct student struct student stu struct student stuarray 10 struct student pstru 結構體型別是struct student,因此,struct和student都不能省略。但實際上,我用codeblocks執行...