結構體是用戶自定義的類型,讓業務聲明更緊湊。編程
type Employee struct{ firstName string lastName string age int }
賦值:編程語言
emp1 := Employee{ firstName : 「Sam」, age : 25, lastName : 「Anderson」, }
或者:函數
emp2 := Employee{「Thomas」, 29, 「Paul」} // 這種狀況下須要保持和結構體中順序同樣
經過操做符 . 進行字段訪問。指針
emp1.firstName emp1.lastname emp1.age
經過這種方式對結構體賦值:code
var emp2 Employee // 建立零值struct,都是默認值 emp2.firstName = 「Jack」 emp2.lastName = 「Adams」
emp3 := &Employee{「sam」,」anderson」,55} // 建立指向結構體指針 (*emp3).firstName // 經過*反解獲取指針指向變量,獲取變量值
或者採用emp3.firstName方式顯示反解。對象
若是結構體名稱以大寫字母開頭,說明它是其餘能夠訪問導出類型,結構體中字段首字母大寫,說明它能夠被其餘包訪問到。string
好比咱們能夠在src目錄下建立名字structs的文件夾,在裏面建立結構體源文件。面向對象編程
結構體是值類型,若是兩個結構體每一個字段都是可比較的(int,string),且變量字段相等,則說明兩個結構體相等。ast
若是結構體中包含不可比較字段(map),則結構體是不可比較的。變量
方法就是一個函數,區別是func和方法名之間加入一個接收器類型,接收器能夠是結構體類型或者非結構體類型,能夠在方法內部訪問這個接收器。
func (t Type) methodName(parameter list){ } // 好比 type Employee struct{ name string salary int currency string } func (e Employee) displaySalary(){ } // 接收器調用 e.displaySalary()
上面例子都是基於值的接收器,指針接收器和值接收器的區別在於,指針接收器的方法內部的改變對於調用者是可見的,這一直也是指針的特色。
在Go中,若是變量是e *Employee的指針,可直接使用e.屬性,直接反解。
指針接收器使用在:對方法內部接收器所作改變須要對調用者可見時。
通常是如下場景: