結構體是一種聚合的數據類型,是由零個或多個任意類型的值聚合成的實體,每一個值稱爲結構體的成員。下面分兩方面介紹:一個是基礎部分,一個是看一下結構體在實際內存中的內存模型。golang
結構體能夠嵌套另外一個結構體。 結構體能夠包含結構體類型的匿名成員,這樣能夠經過p.b就能夠訪問匿名成員結構體中的b。json
type User struct {
UserId int `json:"user_id"`
UserName string `json:"user_name"`
}
u := &User{UserId: 1, UserName: "xitehip"}
j, _ := json.Marshal(u)
fmt.Println(string(j))
// 輸出內容:{"user_id":1,"user_name":"tony"}
複製代碼
t := reflect.TypeOf(u)
field := t.Elem().Field(0)
fmt.Println(field.Tag.Get("json"))
複製代碼
關於映射後續會有專門章節講解。bash
代碼實例:數據結構
type Person struct {
age int
class int
name string
}
var pp *Person
func main() {
p := Person{age:18, class:8, name:"xitehip"}
pp = &p
fmt.Println(*pp)
}
複製代碼
編譯生成的可執行文件,而後用gdb去分析內存佈局見下圖1 函數
由圖1能夠發現,結構體中的元素確實是連續排布的,只不過成員name存儲的是指針。打印name指針的值發現確實是xitehip(可查看ascii表)這個字符串。oop
結構體是一種存儲複合數據,主要應用於一個實體有多個數據類型的場景。在golang面向對象思想中,結構體也應用很是普遍,在後續的文章會詳細講解golang中的面向對象。佈局
參考go語言聖經ui