结构体Struct 结构体是将零个或多个任意类型的命名变量 组合在一起的聚合数据类型,每个变量都是结构体的成员
1 2 3 4 5 type Employee struct { ID int Name string }
一、结构体的基本使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 type Employee struct { ID int Name, Address string Salary int test int }var bob Employee fmt.Println(bob) var claire *Employee fmt.Println(claire) var bobPointer *Employee = &bob bobPointer.ID = 100 fmt.Println(bobPointer.ID) fmt.Println(bob.ID) bb := &Employee{101 , "name" , "address" , 0 , 0 } fmt.Println(bb) cc := &Employee{ID:102 , Name:"name" , Address:"address" , Salary:0 , test:0 } fmt.Println(cc) bob.ID = 103 fmt.Println(bob.ID) salary := &bob.Salary *salary = 1000 + *salary fmt.Println(bob.Salary)
结构体可以作为参数传递给函数,一般传指针,这样开销比较小
二、结构体比较
三、匿名成员 结构体可以进行嵌套
1 2 3 4 5 6 7 8 9 10 11 type A struct { X int }type B struct { a A } b := &B{} fmt.Println(b.a.X)
如果嵌套的时候,成员没有命名,那么就称为匿名成员。这时候就可以直接获取匿名成员中的成员
1 2 3 4 5 6 7 8 9 10 11 12 13 type C struct { A } c := &C{} fmt.Println(c.X) type D struct { C } d := &D{} fmt.Println(d.X)
匿名成员可以是一个结构体,也可以是任何命名类型 或者指向命名类型的指针
这样就可以以快捷的方式访问匿名成员内部的变量或者方法
这个机制就是从简单的类型对象组合称为复合类型的主要方式,在Go中,组合是面向对象编程的核心