1 /* 2 3 結構體變量: 4 結構體的定義只是一種內存布局的描述,只有當結構體實例化時,才會真正地分配內存, 5 因此必須在定義結構體並實例化后才能使用結構體的字段。 6 type 類型名 struct { 7 字段1 字段1類型 8 字段2 字段2類型 9 … 10 } 11 指針類型的結構體 :new 關鍵字對類型(包括結構體、整型、浮點數、字符串等)進行實例化,結構體在實例化后會形成指針類型的結構體 12 1 var o *類型名 = new(類型名) 13 2 o := &類型名{} 14 賦值 : 15 1 var o *類型名 = new(類型名){字段1:值} 16 2 o.字段1 = xxx 17 3 p := &struct {// 定義 18 name string 19 }{// 初始化 20 name:"lizi", 21 } 22 結構體方法: 23 1 每個方法只能有一個接收器(分: 非指針類型 和 指針類型 接收器) 24 2 非指針類型接收器: 當方法作用於非指針接收器時,Go語言會在代碼運行時將接收器的值復制一份,在非指針接收器的方法中可以獲取接收器的成員值,但修改后無效 25 3 指針類型接收器: 指針類型的接收器由一個結構體的指針組成,更接近於面向對象中的 this 或者 self 26 func (接收器變量 接收器類型) 方法名(參數列表) (返回參數) { 27 函數體 28 } 29 例: 30 type ObjectType struct{id int} 31 func (o *ObjectType) SetId(id) int{ 32 o.id = id 33 return id 34 } 35 o := new(ObjectType) 36 o.SetId(0) 37 結構內嵌特性: 38 1 內嵌的結構體可以直接訪問其成員變量 39 2 內嵌結構體的字段名是它的類型名 40 類型內嵌 41 */ 42 package info_struct