一、 結構體(struct)
1、結構體定義
type identifier struct
宣告:new(type) 和 &type{}是等價的
2、初始化結構體
type interval struct
初始化方式:
intr := interval
(a)intr := interval
(b)intr := interval
(c)
3、 使用工廠方法建立結構體type matrix struct
func
newmatrix
(params)
*matrix
在其他包裡使用工廠方法:
package main
import
"matrix"
...wrong :=
new(matrix.matrix)
// 編譯失敗(matrix包中的matrix結構體小寫 是私有的)
right := matrix.
newmatrix
(...
)// 例項化 matrix 的唯一方式
注意:試圖 make() 乙個結構體變數,會引發乙個編譯錯誤
4、 帶標籤的結構體
結構體中的字段除了有名字和型別外,還可以有乙個可選的標籤(tag):它是乙個附屬於字段的字串,可以是文件或其他的重要標記。
標籤的內容不可以在一般的程式設計中使用,只有包 reflect 能獲取它。
例子:
package main
import
("fmt"
"reflect"
)type tagtype struct
func
main()
for i :=
0; i <
3; i++
}func
reftag
(tt tagtype, ix int
)
輸出:
an important answer
the name of the thing
how much there are
5| 匿名欄位和內嵌結構體
結構體可以包含乙個或多個 匿名(或內嵌)字段,即這些字段沒有顯式的名字,只有欄位的型別是必須的,此時型別就是欄位的名字。
匿名字段本身可以是乙個結構體型別,即 結構體可以包含內嵌結構體。
在乙個結構體中對於每一種資料型別只能有乙個匿名字段。
二、方法(method)
go 方法是作用在接收者(receiver)上的乙個函式,接收者是某種型別的變數。因此方法是一種特殊型別的函式。
接收者型別可以是(幾乎)任何型別,不僅僅是結構體型別:任何型別都可以有方法,甚至可以是函式型別,可以是 int、bool、string 或陣列的別名型別。
但是接收者不能是乙個介面型別(參考 第 11 章),因為介面是乙個抽象定義,但是方法卻是具體實現;
如果這樣做會引發乙個編譯錯誤:invalid receiver type…。
方法的格式:
func (recv receiver_type) methodname(parameter_list) (return_value_list)
func (_ receiver_type) methodname(parameter_list) (return_value_list)
函式和方法的區別
函式將變數作為引數:function1(recv)
方法在變數上被呼叫:recv.method1()
Golang基礎 結構體 方法
type 結構體名稱 structtype people structvar peo people fmt.print peo 輸出 fmt.printf p peo 會列印記憶體位址值var peo people 按照結構體中屬性的順序進行賦值,可以省略屬性名稱 peo people fmt.pr...
Go 結構體,結構體指標和方法
結構體 講乙個或多個變數組合到一起形成新的型別,這個型別就是結構體,結構體是值型別 定義結構體和賦值 learn go main.go package main import fmt type people struct func main fmt.printf p peo 0x110040f0 賦...
go 結構體和方法
結構體型別的字面量由關鍵字type 型別名稱 關鍵字struct,以及由花括號包裹的若干字段宣告組成。type person struct person 鍵值對的順序與其型別中的字段宣告完全相同的話,我們還可以統一省略掉所有欄位的名稱 person 結構體型別的值字面量時可以只對它的部分字段賦值,甚...