Skip to content

Latest commit

 

History

History
124 lines (104 loc) · 2.62 KB

09.结构 struct.md

File metadata and controls

124 lines (104 loc) · 2.62 KB

结构 struct

-Go 中的 struct 与 C 中的 struct 非常相似,并且 Go 没有 class
-使用 type <Name> struct{} 定义结构,名称遵循可见性规则
-支持指向自身的指针类型成员
-支持匿名结构,可用作成员或定义成员变量
-匿名结构也可以用作 map 的值
-可以使用字面值对结构进行初始化
-允许直接通过指针来读写结构成员
-相同类型的成员可以进行拷贝赋值
-支持 ==!= 比较运算符,但不支持 ><
-支持匿名字段,本质上是定义了以某个类型名为名称的字段
-嵌入结构作为匿名字段看起来像继承,但不是继承
-可以使用匿名字段指针

type person struct{
    Name string
    Age int
}

func main() {
    //字母值初始化
    a := person{
        Name:"joe",
    }
    //赋值
    a.Age = 19   
    fmt.Println(a)
}   

通过指针操作

type person struct{
    Name string
    Age int
}

func main() {
    a := &person{
        Name: "joe",
        Age:  19,
    }
    a.Age = 13
    fmt.Println(*a)
}

匿名结构

func main() {
    a := struct{
        Name string
        Age  int
    }{
        Name: "joe",
        Age: 19,
    }
    a.Age = 13
    fmt.Println(a)
}

匿名结构嵌套

type person struct {
    Name string
    Age  int
    Contact struct {
        Phone, City string
    }
}

func main() {
    a := person{
        Name: "joe",
        Age:  19,
    }
    a.Contact.Phone = "18826996633"
    a.Contact.City = "beijing"
    fmt.Println(a)
}

匿名字段

type person struct {
    string
    int
}

func main() {
    //按照结构体中类型顺序赋值
    a := person{"joe",19}
    fmt.Println(a)
}

拷贝赋值

type person struct {
    string
    int
}

func main() {
    a := person{"joe",19}
    var b person
    b = a
    fmt.Println(b)
}

结构体嵌入

type human struct {
    Sex int
}

type teacher struct {
    human //此处 humen 是于匿名结构,相对与 humen humen
    Name string
    Age int
}

func main() {
    a := teacher{human: human{Sex:0},Name:"joe",Age:19}
    //Go 将 Sex 默认放到最外层,使 a 可直接调用
    a.Sex = 100
    fmt.Println(a)
}